Class WSDL::XMLSchema::Parser
In: lib/wsdl/xmlSchema/parser.rb
Parent: Object

Methods

Included Modules

XSD

Classes and Modules

Class WSDL::XMLSchema::Parser::AttributeConstraintError
Class WSDL::XMLSchema::Parser::ElementConstraintError
Class WSDL::XMLSchema::Parser::FormatDecodeError
Class WSDL::XMLSchema::Parser::ParseError
Class WSDL::XMLSchema::Parser::ParseFrame
Class WSDL::XMLSchema::Parser::UnexpectedElementError
Class WSDL::XMLSchema::Parser::UnknownAttributeError
Class WSDL::XMLSchema::Parser::UnknownElementError

Public Class methods

[Source]

    # File lib/wsdl/xmlSchema/parser.rb, line 50
50:   def initialize(opt = {})
51:     @parser = XSD::XMLParser.create_parser(self, opt)
52:     @parsestack = nil
53:     @lastnode = nil
54:     @ignored = {}
55:     @location = opt[:location]
56:     @originalroot = opt[:originalroot]
57:   end

Public Instance methods

[Source]

    # File lib/wsdl/xmlSchema/parser.rb, line 86
86:   def characters(text)
87:     lastframe = @parsestack.last
88:     if lastframe
89:       # Need not to be cloned because character does not have attr.
90:       ns = lastframe.ns
91:       decode_text(ns, text)
92:     else
93:       p text if $DEBUG
94:     end
95:   end

[Source]

    # File lib/wsdl/xmlSchema/parser.rb, line 67
67:   def charset
68:     @parser.charset
69:   end

[Source]

     # File lib/wsdl/xmlSchema/parser.rb, line 97
 97:   def end_element(name)
 98:     lastframe = @parsestack.pop
 99:     unless name == lastframe.name
100:       raise UnexpectedElementError.new("closing element name '#{name}' does not match with opening element '#{lastframe.name}'")
101:     end
102:     decode_tag_end(lastframe.ns, lastframe.node)
103:     @lastnode = lastframe.node
104:   end

[Source]

    # File lib/wsdl/xmlSchema/parser.rb, line 59
59:   def parse(string_or_readable)
60:     @parsestack = []
61:     @lastnode = nil
62:     @textbuf = ''
63:     @parser.do_parse(string_or_readable)
64:     @lastnode
65:   end

[Source]

    # File lib/wsdl/xmlSchema/parser.rb, line 71
71:   def start_element(name, attrs)
72:     lastframe = @parsestack.last
73:     ns = parent = nil
74:     if lastframe
75:       ns = lastframe.ns.clone_ns
76:       parent = lastframe.node
77:     else
78:       ns = XSD::NS.new
79:       parent = nil
80:     end
81:     attrs = XSD::XMLParser.filter_ns(ns, attrs)
82:     node = decode_tag(ns, name, attrs, parent)
83:     @parsestack << ParseFrame.new(ns, name, node)
84:   end

Private Instance methods

[Source]

     # File lib/wsdl/xmlSchema/parser.rb, line 108
108:   def decode_tag(ns, name, attrs, parent)
109:     o = nil
110:     elename = ns.parse(name)
111:     if !parent
112:       if elename == SchemaName
113:         o = Schema.parse_element(elename)
114:         o.location = @location
115:       else
116:         raise UnknownElementError.new("unknown element: #{elename}")
117:       end
118:       o.root = @originalroot if @originalroot   # o.root = o otherwise
119:     else
120:       if elename == AnnotationName
121:         # only the first annotation element is allowed for each element.
122:         o = Annotation.new
123:       else
124:         o = parent.parse_element(elename)
125:       end
126:       unless o
127:         unless @ignored.key?(elename)
128:           warn("ignored element: #{elename} of #{parent.class}")
129:           @ignored[elename] = elename
130:         end
131:         o = Documentation.new  # which accepts any element.
132:       end
133:       # node could be a pseudo element.  pseudo element has its own parent.
134:       o.root = parent.root
135:       o.parent = parent if o.parent.nil?
136:     end
137:     attrs.each do |key, value|
138:       attr_ele = ns.parse(key, true)
139:       value_ele = ns.parse(value, true)
140:       value_ele.source = value  # for recovery; value may not be a QName
141:       if attr_ele == IdAttrName
142:         o.id = value_ele
143:       else
144:         unless o.parse_attr(attr_ele, value_ele)
145:           unless @ignored.key?(attr_ele)
146:             warn("ignored attr: #{attr_ele}")
147:             @ignored[attr_ele] = attr_ele
148:           end
149:         end
150:       end
151:     end
152:     o
153:   end

[Source]

     # File lib/wsdl/xmlSchema/parser.rb, line 155
155:   def decode_tag_end(ns, node)
156:     node.parse_epilogue
157:   end

[Source]

     # File lib/wsdl/xmlSchema/parser.rb, line 159
159:   def decode_text(ns, text)
160:     @textbuf << text
161:   end

[Validate]