def parse_elements(elements, base_namespace, mpath, opt)
schema_element = []
any = false
elements.each do |element|
case element
when XMLSchema::Any
raise RuntimeError.new("duplicated 'any'") if any
any = true
varname = 'any'
eleqname = XSD::AnyTypeName
type = nil
occurrence = nil
schema_element << [varname, eleqname, type, occurrence]
when XMLSchema::Element
next if element.ref == SchemaName
typebase = @modulepath
if element.anonymous_type?
child_opt = {
:qualified => (element.elementform == 'qualified'),
:is_anonymous => true
}
@dump_with_inner << dump_complextypedef(mpath, element.name, element.local_complextype, nil, child_opt)
typebase = mpath
end
type = create_type_name(typebase, element)
name = name_element(element).name
varname = safevarname(name)
if element.map_as_array?
if type
type += '[]'
else
type = '[]'
end
end
eleqname = element.name || element.ref
if eleqname && varname == name && eleqname.namespace == base_namespace
eleqname = nil
end
occurrence = [element.minoccurs, element.maxoccurs]
schema_element << [varname, eleqname, type, occurrence]
when WSDL::XMLSchema::Sequence
child_schema_element =
parse_elements(element.elements, base_namespace, mpath, opt)
schema_element << child_schema_element
when WSDL::XMLSchema::Choice
child_schema_element =
parse_elements(element.elements, base_namespace, mpath, opt)
if !element.map_as_array?
child_schema_element.unshift(:choice)
end
schema_element << child_schema_element
when WSDL::XMLSchema::Group
if element.content.nil?
warn("no group definition found: #{element}")
next
end
child_schema_element =
parse_elements(element.content.elements, base_namespace, mpath, opt)
schema_element.concat(child_schema_element)
else
raise RuntimeError.new("unknown type: #{element}")
end
end
schema_element
end