xsd 1.0.0 → 2.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (48) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +11 -0
  3. data/Gemfile +9 -0
  4. data/README.md +14 -4
  5. data/lib/xsd/base_object.rb +43 -40
  6. data/lib/xsd/generator.rb +7 -7
  7. data/lib/xsd/objects/all.rb +2 -2
  8. data/lib/xsd/objects/annotation.rb +2 -2
  9. data/lib/xsd/objects/any.rb +2 -2
  10. data/lib/xsd/objects/any_attribute.rb +2 -2
  11. data/lib/xsd/objects/appinfo.rb +1 -1
  12. data/lib/xsd/objects/attribute.rb +9 -9
  13. data/lib/xsd/objects/attribute_group.rb +1 -1
  14. data/lib/xsd/objects/choice.rb +4 -4
  15. data/lib/xsd/objects/complex_content.rb +3 -3
  16. data/lib/xsd/objects/complex_type.rb +12 -12
  17. data/lib/xsd/objects/documentation.rb +2 -2
  18. data/lib/xsd/objects/element.rb +19 -19
  19. data/lib/xsd/objects/extension.rb +20 -1
  20. data/lib/xsd/objects/facet.rb +1 -1
  21. data/lib/xsd/objects/field.rb +1 -1
  22. data/lib/xsd/objects/group.rb +4 -4
  23. data/lib/xsd/objects/import.rb +15 -44
  24. data/lib/xsd/objects/include.rb +29 -0
  25. data/lib/xsd/objects/key.rb +3 -3
  26. data/lib/xsd/objects/keyref.rb +4 -4
  27. data/lib/xsd/objects/list.rb +1 -1
  28. data/lib/xsd/objects/restriction.rb +23 -3
  29. data/lib/xsd/objects/schema.rb +43 -37
  30. data/lib/xsd/objects/selector.rb +1 -1
  31. data/lib/xsd/objects/sequence.rb +4 -4
  32. data/lib/xsd/objects/simple_content.rb +2 -2
  33. data/lib/xsd/objects/simple_type.rb +5 -5
  34. data/lib/xsd/objects/union.rb +2 -2
  35. data/lib/xsd/objects/unique.rb +2 -2
  36. data/lib/xsd/shared/attribute_container.rb +2 -2
  37. data/lib/xsd/shared/based.rb +9 -9
  38. data/lib/xsd/shared/complex_typed.rb +7 -7
  39. data/lib/xsd/shared/element_container.rb +1 -1
  40. data/lib/xsd/shared/min_max_occurs.rb +4 -4
  41. data/lib/xsd/shared/referenced.rb +3 -3
  42. data/lib/xsd/shared/simple_typed.rb +1 -1
  43. data/lib/xsd/validator.rb +1 -1
  44. data/lib/xsd/version.rb +1 -1
  45. data/lib/xsd/xml.rb +107 -31
  46. data/lib/xsd.rb +1 -0
  47. data/xsd.gemspec +0 -8
  48. metadata +3 -100
@@ -8,26 +8,26 @@ module XSD
8
8
  class SimpleType < BaseObject
9
9
  # Optional. Specifies the name of the attribute. Name and ref attributes cannot both be present
10
10
  # @!attribute name
11
- # @return [String]
11
+ # @return String
12
12
  property :name, :string
13
13
 
14
14
  # Nested restriction
15
15
  # @!attribute restriction
16
- # @return [Restriction, nil]
16
+ # @return Restriction, nil
17
17
  child :restriction, :restriction
18
18
 
19
19
  # Nested union
20
20
  # @!attribute union
21
- # @return [Union, nil]
21
+ # @return Union, nil
22
22
  child :union, :union
23
23
 
24
24
  # Nested list
25
25
  # @!attribute list
26
- # @return [List, nil]
26
+ # @return List, nil
27
27
  child :list, :list
28
28
 
29
29
  # Determine if this is a linked type
30
- # @return [Boolean]
30
+ # @return Boolean
31
31
  def linked?
32
32
  !name.nil?
33
33
  end
@@ -7,13 +7,13 @@ module XSD
7
7
  class Union < BaseObject
8
8
  # Optional. Specifies a list of built-in data types or simpleType elements defined in a schema
9
9
  # @!attribute member_types
10
- # @return [Array<String>]
10
+ # @return Array<String>
11
11
  property :memberTypes, :array, default: [] do |union|
12
12
  union.node['memberTypes']&.split(' ')
13
13
  end
14
14
 
15
15
  # Nested simple and built-in types
16
- # @return [Array<SimpleType, String>]
16
+ # @return Array<SimpleType, String>
17
17
  def types
18
18
  @types ||= map_children(:simpleType) + member_types.map do |name|
19
19
  object_by_name(:simpleType, name) || name
@@ -7,12 +7,12 @@ module XSD
7
7
  class Unique < BaseObject
8
8
  # Get nested selector object
9
9
  # @!attribute selector
10
- # @return [Selector]
10
+ # @return Selector
11
11
  child :selector, :selector
12
12
 
13
13
  # Get nested field objects
14
14
  # @!attribute fields
15
- # @return [Array<Field>]
15
+ # @return Array<Field>
16
16
  child :fields, [:field]
17
17
  end
18
18
  end
@@ -4,11 +4,11 @@ module XSD
4
4
  module AttributeContainer
5
5
  # Nested attributes
6
6
  # @!attribute attributes
7
- # @return [Array<Attribute>]
7
+ # @return Array<Attribute>
8
8
 
9
9
  # Nested attribute groups
10
10
  # @!attribute attribute_groups
11
- # @return [Array<AttributeGroup>]
11
+ # @return Array<AttributeGroup>
12
12
  def self.included(obj)
13
13
  obj.child :attributes, [:attribute]
14
14
  obj.child :attribute_groups, [:attributeGroup]
@@ -5,15 +5,15 @@ module XSD
5
5
  module Based
6
6
  # Required. Specifies the name of a built-in data type, a simpleType element, or a complexType element
7
7
  # @!attribute base
8
- # @return [String]
8
+ # @return String
9
9
 
10
10
  # Base complexType
11
11
  # @!attribute base_complex_type
12
- # @return [ComplexType, nil]
12
+ # @return ComplexType, nil
13
13
 
14
14
  # Base simpleType
15
15
  # @!attribute base_simple_type
16
- # @return [SimpleType, nil]
16
+ # @return SimpleType, nil
17
17
  def self.included(obj)
18
18
  obj.property :base, :string, required: true
19
19
  obj.link :base_complex_type, :complexType, property: :base
@@ -22,16 +22,16 @@ module XSD
22
22
 
23
23
  # Get all available elements on the current stack level, optionally including base type elements
24
24
  # @param [Boolean] include_base
25
- # @return [Array<Element>]
26
- def all_elements(include_base = true)
27
- (include_base && base_complex_type ? base_complex_type.all_elements : []) + super
25
+ # @return Array<Element>
26
+ def collect_elements(include_base = true)
27
+ (include_base && base_complex_type ? base_complex_type.collect_elements : []) + super
28
28
  end
29
29
 
30
30
  # Get all available attributes on the current stack level, optionally including base type attributes
31
31
  # @param [Boolean] include_base
32
- # @return [Array<Attribute>]
33
- def all_attributes(include_base = true)
34
- (include_base && base_complex_type ? base_complex_type.all_attributes : []) + super
32
+ # @return Array<Attribute>
33
+ def collect_attributes(include_base = true)
34
+ (include_base && base_complex_type ? base_complex_type.collect_attributes : []) + super
35
35
  end
36
36
  end
37
37
  end
@@ -5,7 +5,7 @@ module XSD
5
5
  module ComplexTyped
6
6
  # Child/linked complex type
7
7
  # @!attribute complex_type
8
- # @return [ComplexType, nil]
8
+ # @return ComplexType, nil
9
9
  def self.included(obj)
10
10
  obj.child :complex_type, :complexType
11
11
  obj.link :complex_type, :complexType, property: obj::TYPE_PROPERTY
@@ -13,16 +13,16 @@ module XSD
13
13
 
14
14
  # Get all available elements on the current stack level or linked type elements
15
15
  # @param [Boolean] linked_type
16
- # @return [Array<Element>]
17
- def all_elements(linked_type = true)
18
- (linked_type && complex_type&.linked? ? complex_type.all_elements : super)
16
+ # @return Array<Element>
17
+ def collect_elements(linked_type = true)
18
+ (linked_type && complex_type&.linked? ? complex_type.collect_elements : super)
19
19
  end
20
20
 
21
21
  # Get all available attributes on the current stack level or linked type attributes
22
22
  # @param [Boolean] linked_type
23
- # @return [Array<Attribute>]
24
- def all_attributes(linked_type = true)
25
- (linked_type && complex_type&.linked? ? complex_type.all_attributes : super)
23
+ # @return Array<Attribute>
24
+ def collect_attributes(linked_type = true)
25
+ (linked_type && complex_type&.linked? ? complex_type.collect_attributes : super)
26
26
  end
27
27
  end
28
28
  end
@@ -4,7 +4,7 @@ module XSD
4
4
  module ElementContainer
5
5
  # Nested elements
6
6
  # @!attribute elements
7
- # @return [Array<Element>]
7
+ # @return Array<Element>
8
8
  def self.included(obj)
9
9
  obj.child :elements, [:element]
10
10
  end
@@ -5,20 +5,20 @@ module XSD
5
5
  # Optional. Specifies the minimum number of times the choice element can occur in the parent the element.
6
6
  # The value can be any number >= 0. Default value is 1
7
7
  # @!attribute min_occurs
8
- # @return [Integer]
8
+ # @return Integer
9
9
 
10
10
  # Optional. Specifies the maximum number of times the choice element can occur in the parent element.
11
11
  # The value can be any number >= 0, or if you want to set no limit on the maximum number, use the value "unbounded".
12
12
  # Default value is 1
13
13
  # @!attribute max_occurs
14
- # @return [Integer, Symbol]
14
+ # @return Integer, Symbol
15
15
  def self.included(obj)
16
16
  obj.property :minOccurs, :integer, default: 1
17
17
  obj.property :maxOccurs, :integer, default: 1
18
18
  end
19
19
 
20
20
  # Compute actual max_occurs accounting parents
21
- # @return [Integer, Symbol]
21
+ # @return Integer, Symbol
22
22
  def computed_max_occurs
23
23
  @computed_max_occurs ||= if parent.is_a?(MinMaxOccurs)
24
24
  if max_occurs == :unbounded || parent.computed_max_occurs == :unbounded
@@ -32,7 +32,7 @@ module XSD
32
32
  end
33
33
 
34
34
  # Compute actual min_occurs accounting parents
35
- # @return [Integer]
35
+ # @return Integer
36
36
  def computed_min_occurs
37
37
  @computed_min_occurs ||= if parent.is_a?(Choice)
38
38
  0
@@ -5,18 +5,18 @@ module XSD
5
5
  # Optional. Specifies a reference to a named attribute. Name and ref attributes cannot both be present.
6
6
  # If ref is present, simpleType element, form, and type cannot be present
7
7
  # @!attribute ref
8
- # @return [String]
8
+ # @return String
9
9
 
10
10
  # Reference object
11
11
  # @!attribute reference
12
- # @return [BaseObject]
12
+ # @return BaseObject
13
13
  def self.included(obj)
14
14
  obj.property :ref, :string
15
15
  obj.link :reference, obj.mapped_name, property: :ref
16
16
  end
17
17
 
18
18
  # Is object referenced?
19
- # @return [Boolean]
19
+ # @return Boolean
20
20
  def referenced?
21
21
  !ref.nil?
22
22
  end
@@ -5,7 +5,7 @@ module XSD
5
5
  module SimpleTyped
6
6
  # Get child/linked simple type
7
7
  # @!attribute simple_type
8
- # @return [SimpleType, nil]
8
+ # @return SimpleType, nil
9
9
  def self.included(obj)
10
10
  obj.child :simple_type, :simpleType
11
11
  obj.link :simple_type, :simpleType, property: obj::TYPE_PROPERTY
data/lib/xsd/validator.rb CHANGED
@@ -32,7 +32,7 @@ module XSD
32
32
  private
33
33
 
34
34
  # Get Nokogiri::XML::Schema object to validate against
35
- # @return [Nokogiri::XML::Schema]
35
+ # @return Nokogiri::XML::Schema
36
36
  def schema_validator
37
37
  return @schema_validator if @schema_validator
38
38
 
data/lib/xsd/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module XSD
4
- VERSION = '1.0.0'
4
+ VERSION = '2.1.0'
5
5
  end
data/lib/xsd/xml.rb CHANGED
@@ -1,19 +1,24 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'nokogiri'
4
- require 'forwardable'
4
+ require 'net/http'
5
5
 
6
6
  module XSD
7
7
  class XML
8
- extend Forwardable
9
8
  include Generator
10
9
  include Validator
11
10
 
12
- attr_reader :options, :object_cache, :xsd
11
+ attr_reader :options, :object_cache, :schemas, :namespace_prefixes
13
12
 
14
- # Proxy lookup methods to schema
15
- def_delegators :schema, :[], :elements, :all_elements, :attributes, :attribute_groups, :all_attributes,
16
- :complex_types, :simple_types, :groups, :imports
13
+ DEFAULT_RESOURCE_RESOLVER = proc do |location, namespace|
14
+ if location =~ /^https?:/
15
+ Net::HTTP.get(URI(location))
16
+ elsif Pathname.new(location).absolute?
17
+ File.read(location)
18
+ else
19
+ raise ImportError, "Failed to locate import '#{location}'#{namespace ? " for namespace '#{namespace}'" : ''}"
20
+ end
21
+ end
17
22
 
18
23
  CLASS_MAP = {
19
24
  'schema' => Schema,
@@ -26,6 +31,7 @@ module XSD
26
31
  'complexContent' => ComplexContent,
27
32
  'extension' => Extension,
28
33
  'import' => Import,
34
+ 'include' => Include,
29
35
  'simpleType' => SimpleType,
30
36
  'all' => All,
31
37
  'restriction' => Restriction,
@@ -58,54 +64,124 @@ module XSD
58
64
  'pattern' => Facet
59
65
  }.freeze
60
66
 
61
- def initialize(xsd, **options)
62
- # Base input validation
63
- raise Error, 'xsd is not a Pathname nor a string' unless xsd.is_a?(Pathname) || xsd.is_a?(String)
64
- raise Error, 'options is not a hash' unless options.is_a?(Hash)
67
+ # Create reader from a file path
68
+ # @param [String] path
69
+ # @param [Hash] options
70
+ # @return XML
71
+ def self.open(path, **options)
72
+ reader = new(**options)
73
+ reader.add_schema_xml(File.read(path))
74
+ reader
75
+ end
65
76
 
66
- @xsd = xsd
67
- @options = options
68
- @object_cache = {}
77
+ def initialize(**options)
78
+ @options = options
79
+ @object_cache = {}
80
+ @schemas = []
81
+ @namespace_prefixes = {}
69
82
  end
70
83
 
71
84
  def logger
72
85
  options[:logger] || default_logger
73
86
  end
74
87
 
75
- def default_logger
76
- @default_logger ||= Logger.new($stdout).tap do |logger|
77
- logger.level = Logger::WARN
88
+ def resource_resolver
89
+ @options[:resource_resolver] || DEFAULT_RESOURCE_RESOLVER
90
+ end
91
+
92
+ def tmp_dir
93
+ @tmp_dir ||= options[:tmp_dir]
94
+ end
95
+
96
+ def read_document(xml)
97
+ Nokogiri::XML(xml)
98
+ end
99
+
100
+ # Add schema xml to reader instance
101
+ # @return Schema
102
+ def add_schema_xml(xml)
103
+ doc = read_document(xml)
104
+ raise Error, 'Schema node not found, xml does not seem to be a valid XSD' unless doc.root&.name == 'schema'
105
+
106
+ add_schema_node(doc.root)
107
+ end
108
+
109
+ # Add schema node to reader instance
110
+ # @return Schema
111
+ def add_schema_node(node)
112
+ raise Error, 'Added schema must be of type Nokogiri::XML::Node' unless node.is_a?(Nokogiri::XML::Node)
113
+
114
+ new_schema = Schema.new(options.merge(node: node, reader: self))
115
+ schemas.push(new_schema)
116
+ new_schema
117
+ end
118
+
119
+ # Add prefixes defined outside of processed schemas, for example in WSDL document
120
+ # @param [String] prefix
121
+ # @param [String] namespace
122
+ def add_namespace_prefix(prefix, namespace)
123
+ @namespace_prefixes[prefix] = namespace
124
+ end
125
+
126
+ # Get first added (considered primary) schema
127
+ # @return Schema, nil
128
+ def schema
129
+ schemas.first
130
+ end
131
+
132
+ # Get schema by namespace or namespace prefix
133
+ # @param [String, nil] namespace
134
+ # @return Array<Schema>
135
+ def schemas_for_namespace(namespace)
136
+ namespace = namespace_prefixes[namespace] if namespace_prefixes.key?(namespace)
137
+ schemas.select { |schema| schema.target_namespace == namespace }
138
+ end
139
+
140
+ def [](*args)
141
+ schemas.each do |schema|
142
+ item = schema[*args]
143
+ return item if item
78
144
  end
145
+
146
+ nil
79
147
  end
80
148
 
81
- def xml
82
- @xsd_xml ||= xsd.is_a?(Pathname) ? File.read(xsd) : xsd
149
+ def elements(*args)
150
+ collect(:elements, *args)
83
151
  end
84
152
 
85
- def imported_xsd
86
- @imported_xsd ||= options[:imported_xsd] || {}
153
+ def attributes(*args)
154
+ collect(:attributes, *args)
87
155
  end
88
156
 
89
- def tmp_dir
90
- @tmp_dir ||= options[:tmp_dir]
157
+ def attribute_groups
158
+ collect(:attribute_groups)
91
159
  end
92
160
 
93
- def doc
94
- @doc ||= Nokogiri::XML(xml)
161
+ def complex_types
162
+ collect(:complex_types)
95
163
  end
96
164
 
97
- def schema_node
98
- raise Error, 'Document root not found, provided document does not seem to be a valid XSD' unless doc.root
165
+ def simple_types
166
+ collect(:simple_types)
167
+ end
99
168
 
100
- doc.root.name == 'schema' ? doc.root : nil
169
+ def groups
170
+ collect(:groups)
101
171
  end
102
172
 
103
- def schema
104
- @schema ||= Schema.new(self.options.merge(node: schema_node, reader: self))
173
+ private
174
+
175
+ def collect(name, *args)
176
+ result = Set.new
177
+ schemas.each { |schema| result.merge(schema.send(name, *args)) }
178
+ result.to_a
105
179
  end
106
180
 
107
- def schema_for_namespace(_ns)
108
- schema.schema_for_namespace(_ns)
181
+ def default_logger
182
+ @default_logger ||= Logger.new($stdout).tap do |logger|
183
+ logger.level = Logger::WARN
184
+ end
109
185
  end
110
186
  end
111
187
  end
data/lib/xsd.rb CHANGED
@@ -18,6 +18,7 @@ require 'xsd/objects/simple_content'
18
18
  require 'xsd/objects/complex_content'
19
19
  require 'xsd/objects/extension'
20
20
  require 'xsd/objects/import'
21
+ require 'xsd/objects/include'
21
22
  require 'xsd/objects/restriction'
22
23
  require 'xsd/objects/group'
23
24
  require 'xsd/objects/all'
data/xsd.gemspec CHANGED
@@ -34,12 +34,4 @@ Gem::Specification.new do |spec|
34
34
  spec.add_dependency 'builder', '~> 3.2'
35
35
  spec.add_dependency 'nokogiri', '~> 1.11'
36
36
  spec.add_dependency 'rake', '~> 13.0'
37
- spec.add_dependency 'rest-client', '~> 2.1'
38
-
39
- spec.add_development_dependency 'logger', '~> 1.5'
40
- spec.add_development_dependency 'rspec', '~> 3.12'
41
- spec.add_development_dependency 'rubocop', '~> 1.50'
42
- spec.add_development_dependency 'rubocop-performance', '~> 1.17'
43
- spec.add_development_dependency 'rubocop-rake', '~> 0.6'
44
- spec.add_development_dependency 'rubocop-rspec', '~> 2.10'
45
37
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: xsd
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 2.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - d.arkhipov
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-04-27 00:00:00.000000000 Z
11
+ date: 2023-07-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: builder
@@ -52,104 +52,6 @@ dependencies:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: '13.0'
55
- - !ruby/object:Gem::Dependency
56
- name: rest-client
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - "~>"
60
- - !ruby/object:Gem::Version
61
- version: '2.1'
62
- type: :runtime
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - "~>"
67
- - !ruby/object:Gem::Version
68
- version: '2.1'
69
- - !ruby/object:Gem::Dependency
70
- name: logger
71
- requirement: !ruby/object:Gem::Requirement
72
- requirements:
73
- - - "~>"
74
- - !ruby/object:Gem::Version
75
- version: '1.5'
76
- type: :development
77
- prerelease: false
78
- version_requirements: !ruby/object:Gem::Requirement
79
- requirements:
80
- - - "~>"
81
- - !ruby/object:Gem::Version
82
- version: '1.5'
83
- - !ruby/object:Gem::Dependency
84
- name: rspec
85
- requirement: !ruby/object:Gem::Requirement
86
- requirements:
87
- - - "~>"
88
- - !ruby/object:Gem::Version
89
- version: '3.12'
90
- type: :development
91
- prerelease: false
92
- version_requirements: !ruby/object:Gem::Requirement
93
- requirements:
94
- - - "~>"
95
- - !ruby/object:Gem::Version
96
- version: '3.12'
97
- - !ruby/object:Gem::Dependency
98
- name: rubocop
99
- requirement: !ruby/object:Gem::Requirement
100
- requirements:
101
- - - "~>"
102
- - !ruby/object:Gem::Version
103
- version: '1.50'
104
- type: :development
105
- prerelease: false
106
- version_requirements: !ruby/object:Gem::Requirement
107
- requirements:
108
- - - "~>"
109
- - !ruby/object:Gem::Version
110
- version: '1.50'
111
- - !ruby/object:Gem::Dependency
112
- name: rubocop-performance
113
- requirement: !ruby/object:Gem::Requirement
114
- requirements:
115
- - - "~>"
116
- - !ruby/object:Gem::Version
117
- version: '1.17'
118
- type: :development
119
- prerelease: false
120
- version_requirements: !ruby/object:Gem::Requirement
121
- requirements:
122
- - - "~>"
123
- - !ruby/object:Gem::Version
124
- version: '1.17'
125
- - !ruby/object:Gem::Dependency
126
- name: rubocop-rake
127
- requirement: !ruby/object:Gem::Requirement
128
- requirements:
129
- - - "~>"
130
- - !ruby/object:Gem::Version
131
- version: '0.6'
132
- type: :development
133
- prerelease: false
134
- version_requirements: !ruby/object:Gem::Requirement
135
- requirements:
136
- - - "~>"
137
- - !ruby/object:Gem::Version
138
- version: '0.6'
139
- - !ruby/object:Gem::Dependency
140
- name: rubocop-rspec
141
- requirement: !ruby/object:Gem::Requirement
142
- requirements:
143
- - - "~>"
144
- - !ruby/object:Gem::Version
145
- version: '2.10'
146
- type: :development
147
- prerelease: false
148
- version_requirements: !ruby/object:Gem::Requirement
149
- requirements:
150
- - - "~>"
151
- - !ruby/object:Gem::Version
152
- version: '2.10'
153
55
  description: The Ruby XSD library is an XML Schema implementation for Ruby.Provides
154
56
  easy and flexible access to XSD information
155
57
  email:
@@ -188,6 +90,7 @@ files:
188
90
  - lib/xsd/objects/field.rb
189
91
  - lib/xsd/objects/group.rb
190
92
  - lib/xsd/objects/import.rb
93
+ - lib/xsd/objects/include.rb
191
94
  - lib/xsd/objects/key.rb
192
95
  - lib/xsd/objects/keyref.rb
193
96
  - lib/xsd/objects/list.rb