genericode 0.1.0 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (47) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +27 -1
  3. data/.rubocop_todo.yml +66 -0
  4. data/README.adoc +282 -0
  5. data/exe/genericode +7 -0
  6. data/lib/genericode/agency.rb +25 -5
  7. data/lib/genericode/annotation.rb +10 -4
  8. data/lib/genericode/any_other_content.rb +2 -2
  9. data/lib/genericode/any_other_language_content.rb +3 -3
  10. data/lib/genericode/canonical_uri.rb +32 -0
  11. data/lib/genericode/cli/code_lister.rb +67 -0
  12. data/lib/genericode/cli/code_lookup.rb +22 -0
  13. data/lib/genericode/cli/commands.rb +76 -0
  14. data/lib/genericode/cli/converter.rb +35 -0
  15. data/lib/genericode/cli/validator.rb +21 -0
  16. data/lib/genericode/cli.rb +8 -0
  17. data/lib/genericode/code_list.rb +257 -9
  18. data/lib/genericode/code_list_ref.rb +9 -6
  19. data/lib/genericode/code_list_set.rb +39 -2
  20. data/lib/genericode/code_list_set_ref.rb +9 -6
  21. data/lib/genericode/column.rb +37 -11
  22. data/lib/genericode/column_ref.rb +7 -7
  23. data/lib/genericode/column_set.rb +3 -3
  24. data/lib/genericode/column_set_ref.rb +4 -4
  25. data/lib/genericode/data.rb +5 -5
  26. data/lib/genericode/data_restrictions.rb +3 -3
  27. data/lib/genericode/datatype_facet.rb +10 -7
  28. data/lib/genericode/general_identifier.rb +6 -6
  29. data/lib/genericode/identification.rb +53 -11
  30. data/lib/genericode/json/canonical_uri_mixin.rb +17 -0
  31. data/lib/genericode/json/short_name_mixin.rb +17 -0
  32. data/lib/genericode/key.rb +34 -9
  33. data/lib/genericode/key_column_ref.rb +3 -3
  34. data/lib/genericode/key_ref.rb +6 -6
  35. data/lib/genericode/long_name.rb +17 -7
  36. data/lib/genericode/mime_typed_uri.rb +5 -5
  37. data/lib/genericode/row.rb +2 -2
  38. data/lib/genericode/short_name.rb +10 -5
  39. data/lib/genericode/simple_code_list.rb +2 -2
  40. data/lib/genericode/simple_value.rb +3 -3
  41. data/lib/genericode/utils.rb +50 -0
  42. data/lib/genericode/value.rb +5 -4
  43. data/lib/genericode/version.rb +1 -1
  44. data/lib/genericode.rb +12 -0
  45. data/oasis-reqs-implemented.md +31 -0
  46. data/oasis-requirements-1.0.md +56 -0
  47. metadata +28 -54
@@ -1,14 +1,14 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "shale"
3
+ require "lutaml/model"
4
4
 
5
5
  require_relative "annotation"
6
6
 
7
7
  module Genericode
8
- class ColumnSetRef < Shale::Mapper
8
+ class ColumnSetRef < Lutaml::Model::Serializable
9
9
  attribute :annotation, Annotation
10
- attribute :canonical_version_uri, Shale::Type::String
11
- attribute :location_uri, Shale::Type::String, collection: true
10
+ attribute :canonical_version_uri, :string
11
+ attribute :location_uri, :string, collection: true
12
12
 
13
13
  json do
14
14
  map "Annotation", to: :annotation
@@ -1,15 +1,15 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "shale"
3
+ require "lutaml/model"
4
4
 
5
5
  require_relative "annotation"
6
6
  require_relative "datatype_facet"
7
7
 
8
8
  module Genericode
9
- class Data < Shale::Mapper
10
- attribute :type, Shale::Type::String
11
- attribute :datatype_library, Shale::Type::String
12
- attribute :lang, Shale::Type::String
9
+ class Data < Lutaml::Model::Serializable
10
+ attribute :type, :string
11
+ attribute :datatype_library, :string
12
+ attribute :lang, :string
13
13
  attribute :annotation, Annotation
14
14
  attribute :parameter, DatatypeFacet, collection: true
15
15
 
@@ -1,12 +1,12 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "shale"
3
+ require "lutaml/model"
4
4
 
5
5
  require_relative "datatype_facet"
6
6
 
7
7
  module Genericode
8
- class DataRestrictions < Shale::Mapper
9
- attribute :lang, Shale::Type::String
8
+ class DataRestrictions < Lutaml::Model::Serializable
9
+ attribute :lang, :string
10
10
  attribute :parameter, DatatypeFacet, collection: true
11
11
 
12
12
  json do
@@ -1,17 +1,20 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "shale"
3
+ require "lutaml/model"
4
+ require_relative "json/short_name_mixin"
4
5
 
5
6
  module Genericode
6
- class DatatypeFacet < Shale::Mapper
7
- attribute :content, Shale::Type::String
8
- attribute :short_name, Shale::Type::String
9
- attribute :long_name, Shale::Type::String
7
+ class DatatypeFacet < Lutaml::Model::Serializable
8
+ include Json::ShortNameMixin
9
+
10
+ attribute :content, :string
11
+ attribute :short_name, :string
12
+ attribute :long_name, :string
10
13
 
11
14
  json do
12
- map "_", to: :content
13
- map "ShortName", to: :short_name
15
+ map "ShortName", to: :short_name, with: { from: :short_name_from_json, to: :short_name_to_json }
14
16
  map "LongName", to: :long_name
17
+ map "_", to: :content
15
18
  end
16
19
 
17
20
  xml do
@@ -1,17 +1,17 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "shale"
3
+ require "lutaml/model"
4
4
 
5
5
  module Genericode
6
- class GeneralIdentifier < Shale::Mapper
7
- attribute :content, Shale::Type::String
8
- attribute :identifier, Shale::Type::String
9
- attribute :lang, Shale::Type::String
6
+ class GeneralIdentifier < Lutaml::Model::Serializable
7
+ attribute :content, :string
8
+ attribute :identifier, :string
9
+ attribute :lang, :string
10
10
 
11
11
  json do
12
- map "_", to: :content
13
12
  map "Identifier", to: :identifier
14
13
  map "lang", to: :lang
14
+ map "_", to: :content
15
15
  end
16
16
 
17
17
  xml do
@@ -1,34 +1,76 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "shale"
3
+ require "lutaml/model"
4
4
 
5
5
  require_relative "agency"
6
6
  require_relative "long_name"
7
7
  require_relative "mime_typed_uri"
8
+ require_relative "canonical_uri"
8
9
  require_relative "short_name"
10
+ require_relative "json/short_name_mixin"
11
+ require_relative "json/canonical_uri_mixin"
12
+ require_relative "utils"
9
13
 
10
14
  module Genericode
11
- class Identification < Shale::Mapper
15
+ class Identification < Lutaml::Model::Serializable
16
+ include Json::CanonicalUriMixin
17
+ include Json::ShortNameMixin
18
+
12
19
  attribute :short_name, ShortName
13
20
  attribute :long_name, LongName, collection: true
14
- attribute :version, Shale::Type::String
15
- attribute :canonical_uri, Shale::Type::String
16
- attribute :canonical_version_uri, Shale::Type::String
17
- attribute :location_uri, Shale::Type::String, collection: true
21
+ attribute :version, :string
22
+ attribute :canonical_uri, CanonicalUri
23
+ attribute :canonical_version_uri, :string
24
+ attribute :location_uri, :string, collection: true
18
25
  attribute :alternate_format_location_uri, MimeTypedUri, collection: true
19
26
  attribute :agency, Agency
20
27
 
21
28
  json do
22
- map "ShortName", to: :short_name
23
- map "LongName", to: :long_name
29
+ map "ShortName", to: :short_name, with: { from: :short_name_from_json, to: :short_name_to_json }
30
+ map "LongName", to: :long_name, with: { from: :long_name_from_json, to: :long_name_to_json }
24
31
  map "Version", to: :version
25
- map "CanonicalUri", to: :canonical_uri
32
+ map "CanonicalUri", to: :canonical_uri, with: { from: :canonical_uri_from_json, to: :canonical_uri_to_json }
26
33
  map "CanonicalVersionUri", to: :canonical_version_uri
27
- map "LocationUri", to: :location_uri
28
- map "AlternateFormatLocationUri", to: :alternate_format_location_uri
34
+ map "LocationUri", to: :location_uri, with: { from: :location_uri_from_json, to: :location_uri_to_json }
35
+ map "AlternateFormatLocationUri", to: :alternate_format_location_uri,
36
+ with: { from: :alternate_format_location_uri_from_json,
37
+ to: :alternate_format_location_uri_to_json, }
29
38
  map "Agency", to: :agency
30
39
  end
31
40
 
41
+ def long_name_from_json(model, value)
42
+ model.long_name = LongName.of_json(value)
43
+ end
44
+
45
+ def long_name_to_json(model, doc)
46
+ return if model.long_name.empty?
47
+
48
+ doc["LongName"] = LongName.as_json(model.long_name)
49
+ end
50
+
51
+ def location_uri_from_json(model, value)
52
+ # model.location_uri = Shale::Type::String.of_json(Utils.array_wrap(value))
53
+ model.location_uri = Utils.array_wrap(value).map do |val|
54
+ Lutaml::Model::Type::String.cast(val)
55
+ end
56
+ end
57
+
58
+ def location_uri_to_json(model, doc)
59
+ return if model.location_uri.empty?
60
+
61
+ doc["LocationUri"] = Lutaml::Model::Type::String.cast(Utils.one_or_all(model.location_uri))
62
+ end
63
+
64
+ def alternate_format_location_uri_from_json(model, value)
65
+ model.alternate_format_location_uri = MimeTypedUri.of_json(Utils.array_wrap(value))
66
+ end
67
+
68
+ def alternate_format_location_uri_to_json(model, doc)
69
+ return if model.alternate_format_location_uri.empty?
70
+
71
+ doc["AlternateFormatLocationUri"] = MimeTypedUri.as_json(Utils.one_or_all(model.alternate_format_location_uri))
72
+ end
73
+
32
74
  xml do
33
75
  root "Identification"
34
76
  namespace "http://docs.oasis-open.org/codelist/ns/genericode/1.0/", "gc"
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Genericode
4
+ module Json
5
+ module CanonicalUriMixin
6
+ def canonical_uri_from_json(model, value)
7
+ model.canonical_uri = CanonicalUri.new(content: value) if value
8
+ end
9
+
10
+ def canonical_uri_to_json(model, doc)
11
+ return if model.canonical_uri.nil?
12
+
13
+ doc["CanonicalUri"] = model.canonical_uri&.content
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Genericode
4
+ module Json
5
+ module ShortNameMixin
6
+ def short_name_from_json(model, value)
7
+ model.short_name = ShortName.new(content: value) if value
8
+ end
9
+
10
+ def short_name_to_json(model, doc)
11
+ return if model.short_name.nil?
12
+
13
+ doc["ShortName"] = model.short_name.content
14
+ end
15
+ end
16
+ end
17
+ end
@@ -1,30 +1,55 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "shale"
3
+ require "lutaml/model"
4
4
 
5
5
  require_relative "annotation"
6
6
  require_relative "key_column_ref"
7
+ require_relative "canonical_uri"
7
8
  require_relative "long_name"
8
9
  require_relative "short_name"
10
+ require_relative "json/short_name_mixin"
11
+ require_relative "json/canonical_uri_mixin"
12
+ require_relative "utils"
9
13
 
10
14
  module Genericode
11
- class Key < Shale::Mapper
12
- attribute :id, Shale::Type::String
15
+ class Key < Lutaml::Model::Serializable
16
+ include Json::CanonicalUriMixin
17
+ include Json::ShortNameMixin
18
+
19
+ attribute :id, :string
13
20
  attribute :annotation, Annotation
14
21
  attribute :short_name, ShortName
15
22
  attribute :long_name, LongName, collection: true
16
- attribute :canonical_uri, Shale::Type::String
17
- attribute :canonical_version_uri, Shale::Type::String
23
+ attribute :canonical_uri, CanonicalUri
24
+ attribute :canonical_version_uri, :string
18
25
  attribute :column_ref, KeyColumnRef, collection: true
19
26
 
20
27
  json do
21
28
  map "Id", to: :id
22
29
  map "Annotation", to: :annotation
23
- map "ShortName", to: :short_name
24
- map "LongName", to: :long_name
25
- map "CanonicalUri", to: :canonical_uri
30
+ map "ShortName", to: :short_name, with: { from: :short_name_from_json, to: :short_name_to_json }
31
+ map "LongName", to: :long_name, with: { from: :long_name_from_json, to: :long_name_to_json }
32
+ map "CanonicalUri", to: :canonical_uri, with: { from: :canonical_uri_from_json, to: :canonical_uri_to_json }
26
33
  map "CanonicalVersionUri", to: :canonical_version_uri
27
- map "ColumnRef", to: :column_ref
34
+ map "ColumnRef", to: :column_ref, with: { from: :column_ref_from_json, to: :column_ref_to_json }
35
+ end
36
+
37
+ def long_name_from_json(model, value)
38
+ model.long_name = LongName.of_json(value)
39
+ end
40
+
41
+ def long_name_to_json(model, doc)
42
+ return if model.long_name.empty?
43
+
44
+ doc["LongName"] = LongName.as_json(model.long_name)
45
+ end
46
+
47
+ def column_ref_from_json(model, value)
48
+ model.column_ref = Utils.array_wrap(value).map { |n| KeyColumnRef.new(ref: n) }
49
+ end
50
+
51
+ def column_ref_to_json(model, doc)
52
+ doc["ColumnRef"] = Utils.one_or_all(model.column_ref.map(&:ref))
28
53
  end
29
54
 
30
55
  xml do
@@ -1,12 +1,12 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "shale"
3
+ require "lutaml/model"
4
4
 
5
5
  require_relative "annotation"
6
6
 
7
7
  module Genericode
8
- class KeyColumnRef < Shale::Mapper
9
- attribute :ref, Shale::Type::String
8
+ class KeyColumnRef < Lutaml::Model::Serializable
9
+ attribute :ref, :string
10
10
  attribute :annotation, Annotation
11
11
 
12
12
  json do
@@ -1,16 +1,16 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "shale"
3
+ require "lutaml/model"
4
4
 
5
5
  require_relative "annotation"
6
6
 
7
7
  module Genericode
8
- class KeyRef < Shale::Mapper
9
- attribute :id, Shale::Type::String
10
- attribute :external_ref, Shale::Type::String
8
+ class KeyRef < Lutaml::Model::Serializable
9
+ attribute :id, :string
10
+ attribute :external_ref, :string
11
11
  attribute :annotation, Annotation
12
- attribute :canonical_version_uri, Shale::Type::String
13
- attribute :location_uri, Shale::Type::String, collection: true
12
+ attribute :canonical_version_uri, :string
13
+ attribute :location_uri, :string, collection: true
14
14
 
15
15
  json do
16
16
  map "Id", to: :id
@@ -1,17 +1,27 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "shale"
3
+ require "lutaml/model"
4
4
 
5
5
  module Genericode
6
- class LongName < Shale::Mapper
7
- attribute :content, Shale::Type::String
8
- attribute :identifier, Shale::Type::String
9
- attribute :lang, Shale::Type::String
6
+ class LongName < Lutaml::Model::Serializable
7
+ attribute :content, :string
8
+ attribute :identifier, :string
9
+ attribute :lang, :string
10
10
 
11
11
  json do
12
- map "_", to: :content
13
12
  map "Identifier", to: :identifier
14
- map "lang", to: :lang
13
+ map "http://www.w3.org/XML/1998/namespace", to: :lang, with: { from: :lang_from_json, to: :lang_to_json }
14
+ map "_", to: :content
15
+ end
16
+
17
+ def lang_from_json(model, value)
18
+ model.lang = value["lang"]
19
+ end
20
+
21
+ def lang_to_json(model, doc)
22
+ return if model.lang.nil?
23
+
24
+ doc["http://www.w3.org/XML/1998/namespace"] = { "lang" => model.lang }
15
25
  end
16
26
 
17
27
  xml do
@@ -1,15 +1,15 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "shale"
3
+ require "lutaml/model"
4
4
 
5
5
  module Genericode
6
- class MimeTypedUri < Shale::Mapper
7
- attribute :content, Shale::Type::String
8
- attribute :mime_type, Shale::Type::String
6
+ class MimeTypedUri < Lutaml::Model::Serializable
7
+ attribute :content, :string
8
+ attribute :mime_type, :string
9
9
 
10
10
  json do
11
- map "_", to: :content
12
11
  map "MimeType", to: :mime_type
12
+ map "_", to: :content
13
13
  end
14
14
 
15
15
  xml do
@@ -1,12 +1,12 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "shale"
3
+ require "lutaml/model"
4
4
 
5
5
  require_relative "annotation"
6
6
  require_relative "value"
7
7
 
8
8
  module Genericode
9
- class Row < Shale::Mapper
9
+ class Row < Lutaml::Model::Serializable
10
10
  attribute :annotation, Annotation
11
11
  attribute :value, Value, collection: true
12
12
 
@@ -1,15 +1,15 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "shale"
3
+ require "lutaml/model"
4
4
 
5
5
  module Genericode
6
- class ShortName < Shale::Mapper
7
- attribute :content, Shale::Type::String
8
- attribute :lang, Shale::Type::String
6
+ class ShortName < Lutaml::Model::Serializable
7
+ attribute :content, :string
8
+ attribute :lang, :string
9
9
 
10
10
  json do
11
- map "_", to: :content
12
11
  map "lang", to: :lang
12
+ map "_", to: :content
13
13
  end
14
14
 
15
15
  xml do
@@ -19,5 +19,10 @@ module Genericode
19
19
  map_content to: :content
20
20
  map_attribute "lang", to: :lang, prefix: "xml", namespace: "http://www.w3.org/XML/1998/namespace"
21
21
  end
22
+
23
+ # Rule 39: Must not contain whitespace characters
24
+ def valid?
25
+ !content.match(/\s/)
26
+ end
22
27
  end
23
28
  end
@@ -1,12 +1,12 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "shale"
3
+ require "lutaml/model"
4
4
 
5
5
  require_relative "annotation"
6
6
  require_relative "row"
7
7
 
8
8
  module Genericode
9
- class SimpleCodeList < Shale::Mapper
9
+ class SimpleCodeList < Lutaml::Model::Serializable
10
10
  attribute :annotation, Annotation
11
11
  attribute :row, Row, collection: true
12
12
 
@@ -1,10 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "shale"
3
+ require "lutaml/model"
4
4
 
5
5
  module Genericode
6
- class SimpleValue < Shale::Mapper
7
- attribute :content, Shale::Type::String
6
+ class SimpleValue < Lutaml::Model::Serializable
7
+ attribute :content, :string
8
8
 
9
9
  json do
10
10
  map "_", to: :content
@@ -0,0 +1,50 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Genericode
4
+ # Utility functions
5
+ #
6
+ # @api private
7
+ module Utils
8
+ # Wraps object in an array unless it is already an array (or array-like)
9
+ #
10
+ # @param [Object] object
11
+ #
12
+ # @example
13
+ # Utils.array_wrap(nil) # => []
14
+ # Utils.array_wrap([1, 2, 3]) # => [1, 2, 3]
15
+ # Utils.array_wrap(0) # => [0]
16
+ # Utils.array_wrap(foo: :bar) # => [{:foo=>:bar}]
17
+ #
18
+ # @return [Array] An array containing the object. If the object is nil,
19
+ # returns an empty array. If the object responds to `to_ary`, converts it
20
+ # to an array. Otherwise, wraps the object in an array.
21
+ #
22
+ # @api private
23
+ def self.array_wrap(object)
24
+ if object.nil?
25
+ []
26
+ elsif object.respond_to?(:to_ary)
27
+ object.to_ary
28
+ else
29
+ [object]
30
+ end
31
+ end
32
+
33
+ # Returns either the only element of the array or the array itself
34
+ #
35
+ # @param [Array] array
36
+ #
37
+ # @example
38
+ # Utils.one_or_all([0]) # => 0
39
+ # Utils.one_or_all([1, 2, 3]) # => [1, 2, 3]
40
+ # Utils.one_or_all([]) # => []
41
+ #
42
+ # @return [Object, Array] The first element of the array if the array has
43
+ # only one element, otherwise returns the entire array.
44
+ #
45
+ # @api private
46
+ def self.one_or_all(array)
47
+ array.one? ? array.first : array
48
+ end
49
+ end
50
+ end
@@ -1,14 +1,15 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "shale"
3
+ require "lutaml/model"
4
4
 
5
5
  require_relative "annotation"
6
6
  require_relative "any_other_content"
7
7
  require_relative "simple_value"
8
+ require_relative "column_ref"
8
9
 
9
10
  module Genericode
10
- class Value < Shale::Mapper
11
- attribute :column_ref, Shale::Type::String
11
+ class Value < Lutaml::Model::Serializable
12
+ attribute :column_ref, :string
12
13
  attribute :annotation, Annotation
13
14
  attribute :simple_value, SimpleValue
14
15
  attribute :complex_value, AnyOtherContent
@@ -24,7 +25,7 @@ module Genericode
24
25
  root "Value"
25
26
  namespace "http://docs.oasis-open.org/codelist/ns/genericode/1.0/", "gc"
26
27
 
27
- map_attribute "ColumnRef", to: :column_ref
28
+ map_attribute "ColumnRef", to: :column_ref, prefix: nil, namespace: nil
28
29
  map_element "Annotation", to: :annotation, prefix: nil, namespace: nil
29
30
  map_element "SimpleValue", to: :simple_value, prefix: nil, namespace: nil
30
31
  map_element "ComplexValue", to: :complex_value, prefix: nil, namespace: nil
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Genericode
4
- VERSION = "0.1.0"
4
+ VERSION = "0.1.2"
5
5
  end
data/lib/genericode.rb CHANGED
@@ -1,8 +1,20 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "lutaml/model"
4
+
5
+ Lutaml::Model::Config.configure do |config|
6
+ require "lutaml/model/xml_adapter/nokogiri_adapter"
7
+ config.xml_adapter = Lutaml::Model::XmlAdapter::NokogiriAdapter
8
+ end
9
+
3
10
  require_relative "genericode/version"
4
11
  require_relative "genericode/code_list"
5
12
 
6
13
  module Genericode
7
14
  class Error < StandardError; end
15
+
16
+ def self.validate(file_path)
17
+ code_list = CodeList.from_file(file_path)
18
+ code_list.validate_verbose
19
+ end
8
20
  end
@@ -0,0 +1,31 @@
1
+ | Rule | Supported | Implementation |
2
+ |------|-----------|----------------|
3
+ | Rule 1 | Yes | Implemented in `CodeList#validate_verbose` method |
4
+ | Rule 2 | No | Not applicable (xml:base) |
5
+ | Rule 3 | No | Not implemented (external reference validation) |
6
+ | Rule 4 | Yes | Implemented in `CodeList#validate_verbose` method (valid_uri? check) |
7
+ | Rule 5 | No | Not applicable (runtime behavior) |
8
+ | Rule 6 | Yes | Implemented in `CodeList#validate_verbose` method (valid_uri? check) |
9
+ | Rule 7 | No | Not applicable (runtime behavior) |
10
+ | Rule 8 | No | Not implemented (external reference validation) |
11
+ | Rule 9 | No | Not applicable (runtime behavior) |
12
+ | Rule 10-18 | No | Not applicable (xml:base) |
13
+ | Rule 19 | No | Not implemented (datatype ID validation) |
14
+ | Rule 20 | No | Not implemented (complex data validation) |
15
+ | Rule 21 | No | Not applicable (runtime behavior) |
16
+ | Rule 22 | No | Not implemented (complex data validation) |
17
+ | Rule 23 | No | Not implemented (language attribute validation) |
18
+ | Rule 24 | No | Not applicable (external reference format) |
19
+ | Rule 25 | Yes | Implemented in `CodeList#validate_verbose` method (valid_uri? check) |
20
+ | Rule 26-33 | No | Not applicable (runtime behavior or URI usage) |
21
+ | Rule 34 | Yes | Implemented in `CodeList#validate_verbose` method |
22
+ | Rule 35-36 | No | Not applicable (external reference validation or xml:base) |
23
+ | Rule 37 | Yes | Implemented in `CodeList#validate_verbose` method |
24
+ | Rule 38 | No | Not implemented (implicit column reference) |
25
+ | Rule 39 | No | Not implemented (ShortName whitespace check) |
26
+ | Rule 40 | No | Not applicable (runtime behavior) |
27
+ | Rule 41 | Yes | Partially implemented in `CodeList#validate_verbose` method (value_matches_type? check) |
28
+ | Rule 42-43 | No | Not implemented (ComplexValue validation) |
29
+ | Rule 44 | Yes | Implemented in `CodeList#validate_verbose` method (valid_uri? check) |
30
+ | Rule 45-46 | No | Not applicable (runtime behavior) |
31
+ | Rule 47-54 | No | Not implemented (CodeListSet validation) |