xsd 1.0.0 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (45) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +6 -0
  3. data/Gemfile +9 -0
  4. data/README.md +3 -2
  5. data/lib/xsd/base_object.rb +35 -35
  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/facet.rb +1 -1
  20. data/lib/xsd/objects/field.rb +1 -1
  21. data/lib/xsd/objects/group.rb +4 -4
  22. data/lib/xsd/objects/import.rb +15 -44
  23. data/lib/xsd/objects/key.rb +3 -3
  24. data/lib/xsd/objects/keyref.rb +4 -4
  25. data/lib/xsd/objects/list.rb +1 -1
  26. data/lib/xsd/objects/restriction.rb +3 -3
  27. data/lib/xsd/objects/schema.rb +31 -31
  28. data/lib/xsd/objects/selector.rb +1 -1
  29. data/lib/xsd/objects/sequence.rb +4 -4
  30. data/lib/xsd/objects/simple_content.rb +2 -2
  31. data/lib/xsd/objects/simple_type.rb +5 -5
  32. data/lib/xsd/objects/union.rb +2 -2
  33. data/lib/xsd/objects/unique.rb +2 -2
  34. data/lib/xsd/shared/attribute_container.rb +2 -2
  35. data/lib/xsd/shared/based.rb +9 -9
  36. data/lib/xsd/shared/complex_typed.rb +7 -7
  37. data/lib/xsd/shared/element_container.rb +1 -1
  38. data/lib/xsd/shared/min_max_occurs.rb +4 -4
  39. data/lib/xsd/shared/referenced.rb +3 -3
  40. data/lib/xsd/shared/simple_typed.rb +1 -1
  41. data/lib/xsd/validator.rb +1 -1
  42. data/lib/xsd/version.rb +1 -1
  43. data/lib/xsd/xml.rb +102 -31
  44. data/xsd.gemspec +0 -8
  45. metadata +2 -100
@@ -14,30 +14,30 @@ module XSD
14
14
 
15
15
  # Optional. Specifies the name of the attribute. Name and ref attributes cannot both be present
16
16
  # @!attribute name
17
- # @return [String]
17
+ # @return String
18
18
  property :name, :string
19
19
 
20
20
  # Optional. Specifies either the name of a built-in data type, or the name of a simpleType or complexType element
21
21
  # @!attribute type
22
- # @return [String, nil]
22
+ # @return String, nil
23
23
  property :type, :string
24
24
 
25
25
  # Optional. Specifies the name of an element that can be substituted with this element. This attribute cannot be
26
26
  # used if the parent element is not the schema element
27
27
  # @!attribute substitution_group
28
- # @return [String, nil]
28
+ # @return String, nil
29
29
  property :substitutionGroup, :string
30
30
 
31
31
  # Optional. Specifies a default value for the element (can only be used if the element's content is a simple type
32
32
  # or text only)
33
33
  # @!attribute default
34
- # @return [String, nil]
34
+ # @return String, nil
35
35
  property :default, :string
36
36
 
37
37
  # Optional. Specifies a fixed value for the element (can only be used if the element's content is a simple type
38
38
  # or text only)
39
39
  # @!attribute fixed
40
- # @return [String, nil]
40
+ # @return String, nil
41
41
  property :fixed, :string
42
42
 
43
43
  # Optional. Specifies the form for the element. "unqualified" indicates that this element is not required to be
@@ -45,21 +45,21 @@ module XSD
45
45
  # prefix. The default value is the value of the elementFormDefault attribute of the schema element. This attribute
46
46
  # cannot be used if the parent element is the schema element
47
47
  # @!attribute form
48
- # @return [String]
48
+ # @return String
49
49
  property :form, :string
50
50
 
51
51
  # Optional. Specifies whether an explicit null value can be assigned to the element. True enables an instance of
52
52
  # the element to have the null attribute set to true. The null attribute is defined as part of the XML Schema
53
53
  # namespace for instances. Default is false
54
54
  # @!attribute nillable
55
- # @return [Boolean]
55
+ # @return Boolean
56
56
  property :nillable, :boolean, default: false
57
57
 
58
58
  # Optional. Specifies whether the element can be used in an instance document. True indicates that the element
59
59
  # cannot appear in the instance document. Instead, another element whose substitutionGroup attribute contains the
60
60
  # qualified name (QName) of this element must appear in this element's place. Default is false
61
61
  # @!attribute abstract
62
- # @return [Boolean]
62
+ # @return Boolean
63
63
  property :abstract, :boolean, default: false
64
64
 
65
65
  # Optional. Prevents an element with a specified type of derivation from being used in place of this element.
@@ -69,7 +69,7 @@ module XSD
69
69
  # substitution - prevents elements derived by substitution
70
70
  # #all - prevents all derived elements
71
71
  # @!attribute block
72
- # @return [String, nil]
72
+ # @return String, nil
73
73
  property :block, :string
74
74
 
75
75
  # Optional. Sets the default value of the final attribute on the element element. This attribute cannot be used if
@@ -79,50 +79,50 @@ module XSD
79
79
  # restriction - prevents elements derived by restriction
80
80
  # #all - prevents all derived elements
81
81
  # @!attribute final
82
- # @return [String, nil]
82
+ # @return String, nil
83
83
  property :final, :string
84
84
 
85
85
  # Nested unique objects
86
86
  # @!attribute unique
87
- # @return [Array<Unique>]
87
+ # @return Array<Unique>
88
88
  child :unique, [:unique]
89
89
 
90
90
  # Determine if element is required
91
- # @return [Boolean]
91
+ # @return Boolean
92
92
  def required?
93
93
  computed_min_occurs > 0
94
94
  end
95
95
 
96
96
  # Determine if element is optional
97
- # @return [Boolean]
97
+ # @return Boolean
98
98
  def optional?
99
99
  !required?
100
100
  end
101
101
 
102
102
  # Determine if element may occur multiple times
103
- # @return [Boolean]
103
+ # @return Boolean
104
104
  def multiple_allowed?
105
105
  computed_max_occurs == :unbounded || computed_max_occurs > 1
106
106
  end
107
107
 
108
108
  # Determine if element has complex content
109
- # @return [Boolean]
109
+ # @return Boolean
110
110
  def complex?
111
- complex_type && !complex_type.simple_content && all_elements.any?
111
+ complex_type && !complex_type.simple_content && collect_elements.any?
112
112
  end
113
113
 
114
114
  # Get elements that can appear instead of this one
115
- # @return [Array<Element>]
115
+ # @return Array<Element>
116
116
  def substitution_elements
117
117
  # TODO: for now we do not search in parent schemas (that imported current schema)
118
118
  # TODO: refactor for better namespace handling (use xpath with namespaces or correct comparison)
119
- schema.all_elements.select do |element|
119
+ schema.collect_elements.select do |element|
120
120
  element.substitution_group&.split(':')&.last == name
121
121
  end
122
122
  end
123
123
 
124
124
  # Get target namespace
125
- # @return [String]
125
+ # @return String
126
126
  def target_namespace
127
127
  schema.target_namespace
128
128
  end
@@ -6,7 +6,7 @@ module XSD
6
6
  class Facet < BaseObject
7
7
  # Returns facet value
8
8
  # @!attribute value
9
- # @return [String]
9
+ # @return String
10
10
  property :value, :string
11
11
  end
12
12
  end
@@ -7,7 +7,7 @@ module XSD
7
7
  class Field < BaseObject
8
8
  # Required. Identifies a single element or attribute whose content or value is used for the constraint
9
9
  # @!attribute xpath
10
- # @return [String]
10
+ # @return String
11
11
  property :xpath, :string, required: true
12
12
  end
13
13
  end
@@ -11,22 +11,22 @@ module XSD
11
11
 
12
12
  # Optional. Specifies the name of the attribute. Name and ref attributes cannot both be present
13
13
  # @!attribute name
14
- # @return [String]
14
+ # @return String
15
15
  property :name, :string
16
16
 
17
17
  # Nested all object
18
18
  # @!attribute all
19
- # @return [All]
19
+ # @return All
20
20
  child :all, :all
21
21
 
22
22
  # Nested choice object
23
23
  # @!attribute choice
24
- # @return [Choice]
24
+ # @return Choice
25
25
  child :choice, :choice
26
26
 
27
27
  # Nested sequence object
28
28
  # @!attribute sequence
29
- # @return [Sequence]
29
+ # @return Sequence
30
30
  child :sequence, :sequence
31
31
  end
32
32
  end
@@ -1,7 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'rest-client'
4
-
5
3
  module XSD
6
4
  # The import element is used to add multiple schemas with different target namespace to a document.
7
5
  # Parent elements: schema
@@ -9,59 +7,32 @@ module XSD
9
7
  class Import < BaseObject
10
8
  # Optional. Specifies the URI of the namespace to import
11
9
  # @!attribute namespace
12
- # @return [String, nil]
10
+ # @return String, nil
13
11
  property :namespace, :string
14
12
 
15
13
  # Optional. Specifies the URI to the schema for the imported namespace
16
14
  # @!attribute schema_location
17
- # @return [String, nil]
15
+ # @return String, nil
18
16
  property :schemaLocation, :string
19
17
 
20
- # Get imported reader
21
- # @return [XSD:XML]
22
- def imported_reader
23
- return @imported_reader if @imported_reader
24
-
25
- xml = if reader.imported_xsd[namespace]
26
- # check in imported xsd by namespace
27
- reader.imported_xsd[namespace]
28
- elsif schema_location =~ /^https?:/
29
- # check http(s) schema location
30
- download_uri(schema_location)
31
- elsif (path = local_path)
32
- # check local relative path
33
- path
34
- elsif namespace =~ /^https?:/
35
- # check http(s) namespace
36
- # TODO: investigate spec conformance
37
- download_uri(namespace.gsub(/#{File.basename(schema_location, '.*')}$/, '').to_s + schema_location)
38
- else
39
- raise ImportError, "Failed to locate import '#{schema_location}' for namespace '#{namespace}'"
40
- end
41
-
42
- # TODO: pass all provided options
43
- @imported_reader = XSD::XML.new(xml, imported_xsd: reader.imported_xsd, logger: reader.logger)
44
- end
45
-
46
- def local_path
47
- return unless reader.xsd.is_a?(Pathname)
48
-
49
- path = reader.xsd.dirname.join(schema_location)
50
- path.file? ? path : nil
51
- end
18
+ # Get imported schema
19
+ # @return XSD:Schema
20
+ def imported_schema
21
+ schema = reader.schema_for_namespace(namespace)
22
+ return schema if schema
52
23
 
53
- private
24
+ unless schema_location
25
+ raise ImportError, "Schema location not provided for namespace '#{namespace}', use add_schema_xml()/add_schema_node()"
26
+ end
54
27
 
55
- def download_uri(uri)
56
- reader.logger.debug(XSD) { "Downloading import schema for namespace '#{namespace}' from '#{uri}'" }
28
+ xml = reader.resource_resolver.call(schema_location, namespace)
29
+ schema = reader.add_schema_xml(xml)
57
30
 
58
- begin
59
- response = RestClient.get(uri)
60
- rescue RestClient::Exception => e
61
- raise ImportError, e.message
31
+ unless namespace == schema.target_namespace
32
+ raise ImportError, 'Import location does not match imported schema targetNamespace'
62
33
  end
63
34
 
64
- response.body
35
+ schema
65
36
  end
66
37
  end
67
38
  end
@@ -9,17 +9,17 @@ module XSD
9
9
  # The name must be a no-colon-name (NCName) as defined in the XML Namespaces specification.
10
10
  # The name must be unique within an identity constraint set. Required.
11
11
  # @!attribute name
12
- # @return [String]
12
+ # @return String
13
13
  property :name, :string, required: true
14
14
 
15
15
  # Get nested selector object
16
16
  # @!attribute selector
17
- # @return [Selector]
17
+ # @return Selector
18
18
  child :selector, :selector
19
19
 
20
20
  # Get nested field objects
21
21
  # @!attribute fields
22
- # @return [Array<Field>]
22
+ # @return Array<Field>
23
23
  child :fields, [:field]
24
24
  end
25
25
  end
@@ -9,7 +9,7 @@ module XSD
9
9
  # The name must be a no-colon-name (NCName) as defined in the XML Namespaces specification.
10
10
  # The name must be unique within an identity constraint set. Required.
11
11
  # @!attribute name
12
- # @return [String]
12
+ # @return String
13
13
  property :name, :string, required: true
14
14
 
15
15
  # The name of a key or unique element defined in this schema
@@ -17,17 +17,17 @@ module XSD
17
17
  # The refer value must be a qualified name (QName).
18
18
  # The type can include a namespace prefix. Required.
19
19
  # @!attribute refer
20
- # @return [String]
20
+ # @return String
21
21
  property :refer, :string, required: true
22
22
 
23
23
  # Get nested selector object
24
24
  # @!attribute selector
25
- # @return [Selector]
25
+ # @return Selector
26
26
  child :selector, :selector
27
27
 
28
28
  # Get nested field objects
29
29
  # @!attribute fields
30
- # @return [Array<Field>]
30
+ # @return Array<Field>
31
31
  child :fields, [:field]
32
32
  end
33
33
  end
@@ -12,7 +12,7 @@ module XSD
12
12
  # Specifies the name of a built-in data type or simpleType element defined in this or another schema.
13
13
  # This attribute is not allowed if the content contains a simpleType element, otherwise it is required
14
14
  # @!attribute item_type
15
- # @return [String, nil]
15
+ # @return String, nil
16
16
  property :itemType, :string
17
17
  end
18
18
  end
@@ -17,7 +17,7 @@ module XSD
17
17
  ].freeze
18
18
 
19
19
  # Get restriction facets
20
- # @return [Hash]
20
+ # @return Hash
21
21
  def facets
22
22
  nodes.inject({}) do |hash, node|
23
23
  if FACET_ELEMENTS.include?(node.name)
@@ -40,8 +40,8 @@ module XSD
40
40
 
41
41
  # Get all available elements on the current stack level, optionally including base type elements
42
42
  # @param [Boolean] include_base
43
- # @return [Array<Element>]
44
- def all_elements(include_base = false)
43
+ # @return Array<Element>
44
+ def collect_elements(include_base = false)
45
45
  # By default we do not include base element for complex restrictions
46
46
  super
47
47
  end
@@ -13,7 +13,7 @@ module XSD
13
13
  # are not required to be qualified with the namespace prefix. "qualified" indicates that attributes from the target
14
14
  # namespace must be qualified with the namespace prefix
15
15
  # @!attribute attribute_form_default
16
- # @return [String]
16
+ # @return String
17
17
  property :attributeFormDefault, :string, default: 'unqualified'
18
18
 
19
19
  # Optional. The form for elements declared in the target namespace of this schema. The value must be "qualified"
@@ -21,7 +21,7 @@ module XSD
21
21
  # not required to be qualified with the namespace prefix. "qualified" indicates that elements from the target
22
22
  # namespace must be qualified with the namespace prefix
23
23
  # @!attribute element_form_default
24
- # @return [String]
24
+ # @return String
25
25
  property :elementFormDefault, :string, default: 'unqualified'
26
26
 
27
27
  # Optional. Specifies the default value of the block attribute on element and complexType elements in the target
@@ -33,7 +33,7 @@ module XSD
33
33
  # substitution - prevents substitution of elements
34
34
  # #all - prevents all derived complex types
35
35
  # @!attribute block_default
36
- # @return [String]
36
+ # @return String
37
37
  property :blockDefault, :string
38
38
 
39
39
  # Optional. Specifies the default value of the final attribute on element, simpleType, and complexType elements in
@@ -46,109 +46,109 @@ module XSD
46
46
  # union - prevents derivation by union
47
47
  # #all - prevents all derivation
48
48
  # @!attribute final_default
49
- # @return [String]
49
+ # @return String
50
50
  property :finalDefault, :string
51
51
 
52
52
  # Optional. A URI reference of the namespace of this schema
53
53
  # @!attribute target_namespace
54
- # @return [String]
54
+ # @return String
55
55
  property :targetNamespace, :string
56
56
 
57
57
  # Optional. Specifies the version of the schema
58
58
  # @!attribute version
59
- # @return [String]
59
+ # @return String
60
60
  property :version, :string
61
61
 
62
62
  # A URI reference that specifies one or more namespaces for use in this schema. If no prefix is assigned, the schema
63
63
  # components of the namespace can be used with unqualified references
64
64
  # @!attribute xmlns
65
- # @return [String]
65
+ # @return String
66
66
  property :xmlns, :string
67
67
 
68
68
  # Global complex types
69
69
  # @!attribute complex_types
70
- # @return [Array<ComplexType>]
70
+ # @return Array<ComplexType>
71
71
  child :complex_types, [:complexType]
72
72
 
73
73
  # Global simple types
74
74
  # @!attribute simple_types
75
- # @return [Array<SimpleType>]
75
+ # @return Array<SimpleType>
76
76
  child :simple_types, [:simpleType]
77
77
 
78
78
  # Global groups
79
79
  # @!attribute groups
80
- # @return [Array<Group>]
80
+ # @return Array<Group>
81
81
  child :groups, [:group]
82
82
 
83
- # Get nested groups
83
+ # Schema imports
84
84
  # @!attribute imports
85
- # @return [Array<Import>]
85
+ # @return Array<Import>
86
86
  child :imports, [:import]
87
87
 
88
88
  # Get current schema object
89
- # @return [Schema]
89
+ # @return Schema
90
90
  def schema
91
91
  self
92
92
  end
93
93
 
94
- # Get all available root elements. Overrides base implementation for better speed
95
- # @return [Array<Element>]
96
- def all_elements(*)
94
+ # Get all available elements on the current stack level, for schema same as elements
95
+ # @return Array<Element>
96
+ def collect_elements(*)
97
97
  elements
98
98
  end
99
99
 
100
- # Get all available root attributes. Overrides base implementation for better speed
101
- # @return [Array<Attribute>]
102
- def all_attributes(*)
100
+ # Get all available attributes on the current stack level, for schema same as attributes
101
+ # @return Array<Attribute>
102
+ def collect_attributes(*)
103
103
  attributes
104
104
  end
105
105
 
106
106
  # Get target namespace prefix. There may be more than one prefix, but we return only first defined
107
- # @return [String]
107
+ # @return String
108
108
  def target_namespace_prefix
109
109
  @target_namespace_prefix ||= namespaces.key(target_namespace)&.sub(/^xmlns:?/, '') || ''
110
110
  end
111
111
 
112
112
  # Get schema namespace prefix
113
- # @return [String]
113
+ # @return String
114
114
  def namespace_prefix
115
115
  @namespace_prefix ||= namespaces.key(XML_SCHEMA).sub(/^xmlns:?/, '')
116
116
  end
117
117
 
118
118
  # Check if namespace is a target namespace
119
- # @param [String] prefix
120
- # @return [Boolean]
121
- def targets_namespace?(prefix)
122
- namespaces[prefix.empty? ? 'xmlns' : "xmlns:#{prefix}"] == target_namespace
119
+ # @param [String] namespace
120
+ # @return Boolean
121
+ def targets_namespace?(namespace)
122
+ namespace == target_namespace || namespaces[namespace.empty? ? 'xmlns' : "xmlns:#{namespace}"] == target_namespace
123
123
  end
124
124
 
125
125
  # Override map_children on schema to get objects from all imported schemas
126
126
  # @param [Symbol] name
127
- # @return [Array<BaseObject>]
127
+ # @return Array<BaseObject>
128
128
  def map_children(name, cache = {})
129
129
  super(name) + import_map_children(name, cache)
130
130
  end
131
131
 
132
132
  # Get children from all imported schemas
133
133
  # @param [Symbol] name
134
- # @return [Array<BaseObject>]
135
- # TODO: better recursion handling, may be refactor needed 1 reader for all schemas with centralized cache
134
+ # @return Array<BaseObject>
136
135
  def import_map_children(name, cache)
137
136
  return [] if name.to_sym == :import
138
137
 
139
138
  imports.map do |import|
140
139
  if cache[import.namespace]
141
- reader.logger.debug(XSD) { "Schema '#{import.namespace}' already parsed, skiping" }
142
140
  nil
143
141
  else
144
142
  cache[import.namespace] = true
145
- import.imported_reader.schema.map_children(name, cache)
143
+ import.imported_schema.map_children(name, cache)
146
144
  end
147
145
  end.compact.flatten
148
146
  end
149
147
 
148
+ # Get import by namespace
149
+ # @return Import
150
150
  def import_by_namespace(ns)
151
- aliases = [ns, namespaces["xmlns:#{(ns || '').gsub(/^xmlns:/, '')}"]].compact
151
+ aliases = [ns, namespaces["xmlns:#{(ns || '').gsub(/^xmlns:/, '')}"], reader.namespace_prefixes[ns]].compact
152
152
  imports.find { |import| aliases.include?(import.namespace) }
153
153
  end
154
154
  end
@@ -9,7 +9,7 @@ module XSD
9
9
  # Required. Specifies an XPath expression, relative to the element being declared, that identifies the child
10
10
  # elements to which the identity constraint applies
11
11
  # @!attribute xpath
12
- # @return [String]
12
+ # @return String
13
13
  property :xpath, :string, required: true
14
14
  end
15
15
  end
@@ -12,22 +12,22 @@ module XSD
12
12
 
13
13
  # Nested groups
14
14
  # @!attribute groups
15
- # @return [Array<Group>]
15
+ # @return Array<Group>
16
16
  child :groups, [:group]
17
17
 
18
18
  # Nested choices
19
19
  # @!attribute choices
20
- # @return [Array<Choice>]
20
+ # @return Array<Choice>
21
21
  child :choices, [:choice]
22
22
 
23
23
  # Nested sequences
24
24
  # @!attribute sequences
25
- # @return [Array<Sequence>]
25
+ # @return Array<Sequence>
26
26
  child :sequences, [:sequence]
27
27
 
28
28
  # Nested anys
29
29
  # @!attribute anys
30
- # @return [Array<Any>]
30
+ # @return Array<Any>
31
31
  child :anys, [:any]
32
32
  end
33
33
  end
@@ -8,12 +8,12 @@ module XSD
8
8
  class SimpleContent < BaseObject
9
9
  # Nested extension
10
10
  # @!attribute extension
11
- # @return [Extension, nil]
11
+ # @return Extension, nil
12
12
  child :extension, :extension
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
  end
19
19
  end
@@ -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]