soap4r_es 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (165) hide show
  1. checksums.yaml +7 -0
  2. data/bin/wsdl2ruby.rb +140 -0
  3. data/bin/wsdl2ruby_rails.rb +140 -0
  4. data/bin/xsd2ruby.rb +92 -0
  5. data/lib/soap/attachment.rb +109 -0
  6. data/lib/soap/attrproxy.rb +35 -0
  7. data/lib/soap/baseData.rb +1095 -0
  8. data/lib/soap/element.rb +278 -0
  9. data/lib/soap/encodingstyle/aspDotNetHandler.rb +208 -0
  10. data/lib/soap/encodingstyle/handler.rb +121 -0
  11. data/lib/soap/encodingstyle/literalHandler.rb +196 -0
  12. data/lib/soap/encodingstyle/soapHandler.rb +560 -0
  13. data/lib/soap/filter/filterchain.rb +52 -0
  14. data/lib/soap/filter/handler.rb +32 -0
  15. data/lib/soap/filter/streamhandler.rb +30 -0
  16. data/lib/soap/filter.rb +14 -0
  17. data/lib/soap/generator.rb +299 -0
  18. data/lib/soap/header/handler.rb +64 -0
  19. data/lib/soap/header/handlerset.rb +78 -0
  20. data/lib/soap/header/mappinghandler.rb +48 -0
  21. data/lib/soap/header/simplehandler.rb +45 -0
  22. data/lib/soap/httpconfigloader.rb +140 -0
  23. data/lib/soap/mapping/encodedregistry.rb +541 -0
  24. data/lib/soap/mapping/factory.rb +389 -0
  25. data/lib/soap/mapping/literalregistry.rb +392 -0
  26. data/lib/soap/mapping/mapping.rb +577 -0
  27. data/lib/soap/mapping/registry.rb +297 -0
  28. data/lib/soap/mapping/rubytypeFactory.rb +446 -0
  29. data/lib/soap/mapping/schemadefinition.rb +171 -0
  30. data/lib/soap/mapping/typeMap.rb +107 -0
  31. data/lib/soap/mapping/wsdlencodedregistry.rb +212 -0
  32. data/lib/soap/mapping/wsdlliteralregistry.rb +249 -0
  33. data/lib/soap/mapping.rb +13 -0
  34. data/lib/soap/marshal.rb +60 -0
  35. data/lib/soap/mimemessage.rb +243 -0
  36. data/lib/soap/nestedexception.rb +43 -0
  37. data/lib/soap/netHttpClient.rb +242 -0
  38. data/lib/soap/ns.rb +39 -0
  39. data/lib/soap/parser.rb +253 -0
  40. data/lib/soap/processor.rb +67 -0
  41. data/lib/soap/property.rb +330 -0
  42. data/lib/soap/proxy.rb +15 -0
  43. data/lib/soap/rpc/cgistub.rb +249 -0
  44. data/lib/soap/rpc/driver.rb +222 -0
  45. data/lib/soap/rpc/element.rb +375 -0
  46. data/lib/soap/rpc/httpserver.rb +144 -0
  47. data/lib/soap/rpc/methodDef.rb +69 -0
  48. data/lib/soap/rpc/proxy.rb +573 -0
  49. data/lib/soap/rpc/router.rb +672 -0
  50. data/lib/soap/rpc/rpc.rb +26 -0
  51. data/lib/soap/rpc/soaplet.rb +201 -0
  52. data/lib/soap/rpc/standaloneServer.rb +44 -0
  53. data/lib/soap/soap.rb +163 -0
  54. data/lib/soap/streamHandler.rb +302 -0
  55. data/lib/soap/version.rb +12 -0
  56. data/lib/soap/wsdlDriver.rb +165 -0
  57. data/lib/wsdl/binding.rb +66 -0
  58. data/lib/wsdl/data.rb +65 -0
  59. data/lib/wsdl/definitions.rb +237 -0
  60. data/lib/wsdl/documentation.rb +33 -0
  61. data/lib/wsdl/import.rb +81 -0
  62. data/lib/wsdl/importer.rb +39 -0
  63. data/lib/wsdl/info.rb +51 -0
  64. data/lib/wsdl/message.rb +55 -0
  65. data/lib/wsdl/operation.rb +152 -0
  66. data/lib/wsdl/operationBinding.rb +241 -0
  67. data/lib/wsdl/param.rb +94 -0
  68. data/lib/wsdl/parser.rb +180 -0
  69. data/lib/wsdl/part.rb +53 -0
  70. data/lib/wsdl/port.rb +67 -0
  71. data/lib/wsdl/portType.rb +76 -0
  72. data/lib/wsdl/service.rb +62 -0
  73. data/lib/wsdl/soap/address.rb +41 -0
  74. data/lib/wsdl/soap/binding.rb +50 -0
  75. data/lib/wsdl/soap/body.rb +59 -0
  76. data/lib/wsdl/soap/cgiStubCreator.rb +93 -0
  77. data/lib/wsdl/soap/classDefCreator.rb +529 -0
  78. data/lib/wsdl/soap/classDefCreatorSupport.rb +242 -0
  79. data/lib/wsdl/soap/classNameCreator.rb +57 -0
  80. data/lib/wsdl/soap/clientSkeltonCreator.rb +107 -0
  81. data/lib/wsdl/soap/complexType.rb +174 -0
  82. data/lib/wsdl/soap/data.rb +43 -0
  83. data/lib/wsdl/soap/definitions.rb +201 -0
  84. data/lib/wsdl/soap/driverCreator.rb +121 -0
  85. data/lib/wsdl/soap/element.rb +34 -0
  86. data/lib/wsdl/soap/encodedMappingRegistryCreator.rb +74 -0
  87. data/lib/wsdl/soap/fault.rb +57 -0
  88. data/lib/wsdl/soap/header.rb +87 -0
  89. data/lib/wsdl/soap/headerfault.rb +57 -0
  90. data/lib/wsdl/soap/literalMappingRegistryCreator.rb +116 -0
  91. data/lib/wsdl/soap/mappingRegistryCreator.rb +59 -0
  92. data/lib/wsdl/soap/mappingRegistryCreatorSupport.rb +380 -0
  93. data/lib/wsdl/soap/methodDefCreator.rb +200 -0
  94. data/lib/wsdl/soap/operation.rb +113 -0
  95. data/lib/wsdl/soap/servantSkeltonCreator.rb +92 -0
  96. data/lib/wsdl/soap/servletStubCreator.rb +105 -0
  97. data/lib/wsdl/soap/standaloneServerStubCreator.rb +101 -0
  98. data/lib/wsdl/soap/wsdl2ruby.rb +249 -0
  99. data/lib/wsdl/types.rb +45 -0
  100. data/lib/wsdl/wsdl.rb +25 -0
  101. data/lib/wsdl/xmlSchema/all.rb +25 -0
  102. data/lib/wsdl/xmlSchema/annotation.rb +35 -0
  103. data/lib/wsdl/xmlSchema/any.rb +62 -0
  104. data/lib/wsdl/xmlSchema/anyAttribute.rb +49 -0
  105. data/lib/wsdl/xmlSchema/attribute.rb +105 -0
  106. data/lib/wsdl/xmlSchema/attributeGroup.rb +69 -0
  107. data/lib/wsdl/xmlSchema/choice.rb +59 -0
  108. data/lib/wsdl/xmlSchema/complexContent.rb +98 -0
  109. data/lib/wsdl/xmlSchema/complexExtension.rb +120 -0
  110. data/lib/wsdl/xmlSchema/complexRestriction.rb +105 -0
  111. data/lib/wsdl/xmlSchema/complexType.rb +194 -0
  112. data/lib/wsdl/xmlSchema/content.rb +96 -0
  113. data/lib/wsdl/xmlSchema/data.rb +117 -0
  114. data/lib/wsdl/xmlSchema/element.rb +154 -0
  115. data/lib/wsdl/xmlSchema/enumeration.rb +37 -0
  116. data/lib/wsdl/xmlSchema/fractiondigits.rb +38 -0
  117. data/lib/wsdl/xmlSchema/group.rb +101 -0
  118. data/lib/wsdl/xmlSchema/import.rb +53 -0
  119. data/lib/wsdl/xmlSchema/importHandler.rb +45 -0
  120. data/lib/wsdl/xmlSchema/importer.rb +103 -0
  121. data/lib/wsdl/xmlSchema/include.rb +48 -0
  122. data/lib/wsdl/xmlSchema/length.rb +38 -0
  123. data/lib/wsdl/xmlSchema/list.rb +49 -0
  124. data/lib/wsdl/xmlSchema/maxexclusive.rb +38 -0
  125. data/lib/wsdl/xmlSchema/maxinclusive.rb +38 -0
  126. data/lib/wsdl/xmlSchema/maxlength.rb +38 -0
  127. data/lib/wsdl/xmlSchema/minexclusive.rb +38 -0
  128. data/lib/wsdl/xmlSchema/mininclusive.rb +38 -0
  129. data/lib/wsdl/xmlSchema/minlength.rb +38 -0
  130. data/lib/wsdl/xmlSchema/parser.rb +168 -0
  131. data/lib/wsdl/xmlSchema/pattern.rb +37 -0
  132. data/lib/wsdl/xmlSchema/ref.rb +34 -0
  133. data/lib/wsdl/xmlSchema/schema.rb +179 -0
  134. data/lib/wsdl/xmlSchema/sequence.rb +55 -0
  135. data/lib/wsdl/xmlSchema/simpleContent.rb +70 -0
  136. data/lib/wsdl/xmlSchema/simpleExtension.rb +63 -0
  137. data/lib/wsdl/xmlSchema/simpleRestriction.rb +133 -0
  138. data/lib/wsdl/xmlSchema/simpleType.rb +88 -0
  139. data/lib/wsdl/xmlSchema/totaldigits.rb +38 -0
  140. data/lib/wsdl/xmlSchema/union.rb +36 -0
  141. data/lib/wsdl/xmlSchema/unique.rb +35 -0
  142. data/lib/wsdl/xmlSchema/whitespace.rb +38 -0
  143. data/lib/wsdl/xmlSchema/xsd2ruby.rb +177 -0
  144. data/lib/xsd/charset.rb +190 -0
  145. data/lib/xsd/codegen/classdef.rb +230 -0
  146. data/lib/xsd/codegen/commentdef.rb +35 -0
  147. data/lib/xsd/codegen/gensupport.rb +277 -0
  148. data/lib/xsd/codegen/methoddef.rb +71 -0
  149. data/lib/xsd/codegen/moduledef.rb +209 -0
  150. data/lib/xsd/codegen.rb +13 -0
  151. data/lib/xsd/datatypes.rb +1465 -0
  152. data/lib/xsd/datatypes1999.rb +21 -0
  153. data/lib/xsd/iconvcharset.rb +33 -0
  154. data/lib/xsd/mapping.rb +69 -0
  155. data/lib/xsd/namedelements.rb +133 -0
  156. data/lib/xsd/ns.rb +183 -0
  157. data/lib/xsd/qname.rb +80 -0
  158. data/lib/xsd/xmlparser/libxmlparser.rb +136 -0
  159. data/lib/xsd/xmlparser/nokogiriparser.rb +63 -0
  160. data/lib/xsd/xmlparser/ogaparser.rb +53 -0
  161. data/lib/xsd/xmlparser/oxparser.rb +97 -0
  162. data/lib/xsd/xmlparser/parser.rb +101 -0
  163. data/lib/xsd/xmlparser/rexmlparser.rb +54 -0
  164. data/lib/xsd/xmlparser.rb +81 -0
  165. metadata +240 -0
@@ -0,0 +1,21 @@
1
+ # encoding: UTF-8
2
+ # XSD4R - XML Schema Datatype 1999 support
3
+ # Copyright (C) 2000-2007 NAKAMURA, Hiroshi <nahi@ruby-lang.org>.
4
+
5
+ # This program is copyrighted free software by NAKAMURA, Hiroshi. You can
6
+ # redistribute it and/or modify it under the same terms of Ruby's license;
7
+ # either the dual license version in 2003, or any later version.
8
+
9
+
10
+ require 'xsd/datatypes'
11
+
12
+
13
+ module XSD
14
+ Namespace.replace('http://www.w3.org/1999/XMLSchema')
15
+ InstanceNamespace.replace('http://www.w3.org/1999/XMLSchema-instance')
16
+ AnyTypeLiteral.replace('ur-type')
17
+ AnySimpleTypeLiteral.replace('ur-type')
18
+ NilLiteral.replace('null')
19
+ NilValue.replace('1')
20
+ DateTimeLiteral.replace('timeInstant')
21
+ end
@@ -0,0 +1,33 @@
1
+ # encoding: UTF-8
2
+ # XSD4R - Charset handling with iconv.
3
+ # Copyright (C) 2000-2007 NAKAMURA, Hiroshi <nahi@ruby-lang.org>.
4
+
5
+ # This program is copyrighted free software by NAKAMURA, Hiroshi. You can
6
+ # redistribute it and/or modify it under the same terms of Ruby's license;
7
+ # either the dual license version in 2003, or any later version.
8
+
9
+ require 'iconv' unless ''.respond_to? :encode
10
+
11
+ module XSD
12
+
13
+
14
+ class IconvCharset
15
+ def self.safe_iconv(to, from, str)
16
+ return str.encode(to, from, :invalid => :replace, :undef => :replace, :replace => '?') if ''.respond_to? :encode
17
+ iconv = Iconv.new(to, from)
18
+ out = ""
19
+ begin
20
+ out << iconv.iconv(str)
21
+ rescue Iconv::IllegalSequence => e
22
+ out << e.success
23
+ ch, str = e.failed.split(//, 2)
24
+ out << '?'
25
+ warn("Failed to convert #{ch}")
26
+ retry
27
+ end
28
+ return out
29
+ end
30
+ end
31
+
32
+
33
+ end
@@ -0,0 +1,69 @@
1
+ # encoding: UTF-8
2
+ # XSD4R - XML Mapping for Ruby
3
+ # Copyright (C) 2000-2007 NAKAMURA, Hiroshi <nahi@ruby-lang.org>.
4
+
5
+ # This program is copyrighted free software by NAKAMURA, Hiroshi. You can
6
+ # redistribute it and/or modify it under the same terms of Ruby's license;
7
+ # either the dual license version in 2003, or any later version.
8
+
9
+
10
+ require "soap/parser"
11
+ require 'soap/encodingstyle/literalHandler'
12
+ require "soap/generator"
13
+ require "soap/mapping"
14
+ require "soap/mapping/wsdlliteralregistry"
15
+
16
+
17
+ module XSD
18
+
19
+
20
+ module Mapping
21
+ MappingRegistry = SOAP::Mapping::LiteralRegistry.new
22
+
23
+ def self.obj2xml(obj, elename = nil, io = nil)
24
+ Mapper.new(MappingRegistry).obj2xml(obj, elename, io)
25
+ end
26
+
27
+ def self.xml2obj(stream, klass = nil)
28
+ Mapper.new(MappingRegistry).xml2obj(stream, klass)
29
+ end
30
+
31
+ class Mapper
32
+ MAPPING_OPT = {
33
+ :default_encodingstyle => SOAP::LiteralNamespace,
34
+ :generate_explicit_type => false,
35
+ :root_type_hint => true
36
+ }.freeze
37
+
38
+ def initialize(registry)
39
+ @registry = registry
40
+ end
41
+
42
+ def obj2xml(obj, elename = nil, io = nil)
43
+ opt = MAPPING_OPT.dup
44
+ unless elename
45
+ if definition = @registry.elename_schema_definition_from_class(obj.class)
46
+ elename = definition.elename
47
+ opt[:root_type_hint] = false
48
+ end
49
+ end
50
+ elename = SOAP::Mapping.to_qname(elename) if elename
51
+ soap = SOAP::Mapping.obj2soap(obj, @registry, elename, opt)
52
+ if soap.elename.nil? or soap.elename == XSD::QName::EMPTY
53
+ soap.elename =
54
+ XSD::QName.new(nil, SOAP::Mapping.name2elename(obj.class.to_s))
55
+ end
56
+ generator = SOAP::Generator.new(opt)
57
+ generator.generate(soap, io)
58
+ end
59
+
60
+ def xml2obj(stream, klass = nil)
61
+ parser = SOAP::Parser.new(MAPPING_OPT)
62
+ soap = parser.parse(stream)
63
+ SOAP::Mapping.soap2obj(soap, @registry, klass)
64
+ end
65
+ end
66
+ end
67
+
68
+
69
+ end
@@ -0,0 +1,133 @@
1
+ # encoding: UTF-8
2
+ # XSD4R - WSDL named element collection.
3
+ # Copyright (C) 2000-2007 NAKAMURA, Hiroshi <nahi@ruby-lang.org>.
4
+
5
+ # This program is copyrighted free software by NAKAMURA, Hiroshi. You can
6
+ # redistribute it and/or modify it under the same terms of Ruby's license;
7
+ # either the dual license version in 2003, or any later version.
8
+
9
+
10
+ module XSD
11
+
12
+
13
+ class NamedElements
14
+ include Enumerable
15
+
16
+ def initialize
17
+ @elements = []
18
+ @cache = {}
19
+ end
20
+
21
+ def dup
22
+ o = NamedElements.new
23
+ o.elements = @elements.dup
24
+ o
25
+ end
26
+
27
+ def freeze
28
+ super
29
+ @elements.freeze
30
+ self
31
+ end
32
+
33
+ def empty?
34
+ size == 0
35
+ end
36
+
37
+ def size
38
+ @elements.size
39
+ end
40
+
41
+ def [](idx)
42
+ if idx.is_a?(Numeric)
43
+ @elements[idx]
44
+ else
45
+ @cache[idx] ||= @elements.find { |item| item.name == idx }
46
+ end
47
+ end
48
+
49
+ def find_name(name)
50
+ @elements.find { |item| item.name.name == name }
51
+ end
52
+
53
+ def keys
54
+ collect { |element| element.name }
55
+ end
56
+
57
+ def each
58
+ @elements.each do |element|
59
+ yield(element)
60
+ end
61
+ end
62
+
63
+ def <<(rhs)
64
+ @elements << rhs
65
+ self
66
+ end
67
+
68
+ def delete(rhs)
69
+ rv = @elements.delete(rhs)
70
+ @cache.clear
71
+ rv
72
+ end
73
+
74
+ def +(rhs)
75
+ o = NamedElements.new
76
+ o.elements = @elements + rhs.elements
77
+ @cache.clear
78
+ o
79
+ end
80
+
81
+ def concat(rhs)
82
+ @elements.concat(rhs.elements)
83
+ @cache.clear
84
+ self
85
+ end
86
+
87
+ def uniq
88
+ o = NamedElements.new
89
+ o.elements = uniq_elements
90
+ o
91
+ end
92
+
93
+ def uniq!
94
+ @elements.replace(uniq_elements)
95
+ @cache.clear
96
+ end
97
+
98
+ def find_all
99
+ o = NamedElements.new
100
+ each do |ele|
101
+ o << ele if yield(ele)
102
+ end
103
+ o
104
+ end
105
+
106
+ Empty = NamedElements.new.freeze
107
+
108
+ protected
109
+
110
+ def elements=(rhs)
111
+ @elements = rhs
112
+ end
113
+
114
+ def elements
115
+ @elements
116
+ end
117
+
118
+ private
119
+
120
+ def uniq_elements
121
+ dict = {}
122
+ elements = []
123
+ @elements.each do |ele|
124
+ unless dict.key?(ele.name)
125
+ dict[ele.name] = ele
126
+ elements << ele
127
+ end
128
+ end
129
+ elements
130
+ end
131
+ end
132
+
133
+ end
data/lib/xsd/ns.rb ADDED
@@ -0,0 +1,183 @@
1
+ # encoding: UTF-8
2
+ # XSD4R - XML Schema Namespace library
3
+ # Copyright (C) 2000-2007 NAKAMURA, Hiroshi <nahi@ruby-lang.org>.
4
+
5
+ # This program is copyrighted free software by NAKAMURA, Hiroshi. You can
6
+ # redistribute it and/or modify it under the same terms of Ruby's license;
7
+ # either the dual license version in 2003, or any later version.
8
+
9
+
10
+ require 'xsd/datatypes'
11
+
12
+
13
+ module XSD
14
+
15
+
16
+ class NS
17
+ Namespace = 'http://www.w3.org/XML/1998/namespace'
18
+
19
+ KNOWN_TAG = {
20
+ XSD::Namespace => 'xsd',
21
+ XSD::InstanceNamespace => 'xsi',
22
+ }
23
+
24
+ class Assigner
25
+ attr_reader :known_tag
26
+
27
+ def initialize(known_tag)
28
+ @known_tag = known_tag.dup
29
+ @count = 0
30
+ end
31
+
32
+ def assign(ns)
33
+ if @known_tag.key?(ns)
34
+ return @known_tag[ns]
35
+ end
36
+ @count += 1
37
+ "n#{@count}"
38
+ end
39
+ end
40
+
41
+ attr_reader :default_namespace
42
+
43
+ class FormatError < Error; end
44
+
45
+ public
46
+
47
+ def initialize(tag2ns = nil)
48
+ @tag2ns = tag2ns || ns_default
49
+ @ns2tag = @tag2ns.invert
50
+ @assigner = nil
51
+ @default_namespace = nil
52
+ end
53
+
54
+ def known_tag
55
+ @assigner ||= Assigner.new(default_known_tag)
56
+ @assigner.known_tag
57
+ end
58
+
59
+ def assign(ns, tag = nil)
60
+ if tag == ''
61
+ if ns.empty?
62
+ @default_namespace = nil
63
+ else
64
+ @default_namespace = ns
65
+ end
66
+ tag
67
+ else
68
+ @assigner ||= Assigner.new(default_known_tag)
69
+ tag ||= @assigner.assign(ns)
70
+ @ns2tag[ns] = tag
71
+ @tag2ns[tag] = ns
72
+ tag
73
+ end
74
+ end
75
+
76
+ def assigned?(ns)
77
+ @default_namespace == ns or @ns2tag.key?(ns)
78
+ end
79
+
80
+ def assigned_as_tagged?(ns)
81
+ @ns2tag.key?(ns)
82
+ end
83
+
84
+ def assigned_tag?(tag)
85
+ @tag2ns.key?(tag)
86
+ end
87
+
88
+ def clone_ns
89
+ cloned = self.class.new(@tag2ns.dup)
90
+ cloned.assigner = @assigner
91
+ cloned.assign(@default_namespace, '') if @default_namespace
92
+ cloned
93
+ end
94
+
95
+ def name(qname)
96
+ if qname.namespace == @default_namespace
97
+ qname.name
98
+ elsif tag = @ns2tag[qname.namespace]
99
+ "#{tag}:#{qname.name}"
100
+ else
101
+ raise FormatError.new("namespace: #{qname.namespace} not defined yet")
102
+ end
103
+ end
104
+
105
+ # no default namespace
106
+ def name_attr(qname)
107
+ if tag = @ns2tag[qname.namespace]
108
+ "#{tag}:#{qname.name}"
109
+ else
110
+ raise FormatError.new("namespace: #{qname.namespace} not defined yet")
111
+ end
112
+ end
113
+
114
+ def compare(ns, name, rhs)
115
+ if (ns == @default_namespace)
116
+ return true if (name == rhs)
117
+ end
118
+ @tag2ns.each do |assigned_tag, assigned_ns|
119
+ if assigned_ns == ns && "#{assigned_tag}:#{name}" == rhs
120
+ return true
121
+ end
122
+ end
123
+ false
124
+ end
125
+
126
+ # $1 and $2 are necessary.
127
+ ParseRegexp = Regexp.new('\A([^:]+)(?::(.+))?\z', nil)
128
+
129
+ def parse(str, local = false)
130
+ if ParseRegexp =~ str
131
+ if (name = $2) and (ns = @tag2ns[$1])
132
+ return XSD::QName.new(ns, name)
133
+ end
134
+ end
135
+ XSD::QName.new(local ? nil : @default_namespace, str)
136
+ end
137
+
138
+ # For local attribute key parsing
139
+ # <foo xmlns="urn:a" xmlns:n1="urn:a" bar="1" n1:baz="2" />
140
+ # =>
141
+ # {}bar, {urn:a}baz
142
+ def parse_local(elem)
143
+ ParseRegexp =~ elem
144
+ if $2
145
+ ns = @tag2ns[$1]
146
+ name = $2
147
+ if !ns
148
+ raise FormatError.new("unknown namespace qualifier: #{$1}")
149
+ end
150
+ elsif $1
151
+ ns = nil
152
+ name = $1
153
+ else
154
+ raise FormatError.new("illegal element format: #{elem}")
155
+ end
156
+ XSD::QName.new(ns, name)
157
+ end
158
+
159
+ def each_ns
160
+ @ns2tag.each do |ns, tag|
161
+ yield(ns, tag)
162
+ end
163
+ end
164
+
165
+ protected
166
+
167
+ def assigner=(assigner)
168
+ @assigner = assigner
169
+ end
170
+
171
+ private
172
+
173
+ def ns_default
174
+ {'xml' => Namespace}
175
+ end
176
+
177
+ def default_known_tag
178
+ KNOWN_TAG
179
+ end
180
+ end
181
+
182
+
183
+ end
data/lib/xsd/qname.rb ADDED
@@ -0,0 +1,80 @@
1
+ # encoding: UTF-8
2
+ # XSD4R - XML QName definition.
3
+ # Copyright (C) 2000-2007 NAKAMURA, Hiroshi <nahi@ruby-lang.org>.
4
+
5
+ # This program is copyrighted free software by NAKAMURA, Hiroshi. You can
6
+ # redistribute it and/or modify it under the same terms of Ruby's license;
7
+ # either the dual license version in 2003, or any later version.
8
+
9
+
10
+ module XSD
11
+
12
+
13
+ class QName
14
+ attr_reader :namespace
15
+ attr_reader :name
16
+ attr_accessor :source
17
+
18
+ def initialize(namespace = nil, name = nil)
19
+ @namespace = namespace ? namespace.to_s : nil
20
+ @name = name ? name.to_s : nil
21
+ @source = nil
22
+ end
23
+
24
+ def dup_name(name)
25
+ XSD::QName.new(@namespace, name)
26
+ end
27
+
28
+ def dump(predefined_ns = nil)
29
+ ns = predefined_ns
30
+ ns ||= @namespace.nil? ? 'nil' : @namespace.dump
31
+ name = @name.nil? ? 'nil' : @name.dump
32
+ "XSD::QName.new(#{ns}, #{name})"
33
+ end
34
+
35
+ def match(rhs)
36
+ if rhs.namespace and (rhs.namespace != @namespace)
37
+ return false
38
+ end
39
+ if rhs.name and (rhs.name != @name)
40
+ return false
41
+ end
42
+ true
43
+ end
44
+
45
+ def ==(rhs)
46
+ !rhs.nil? and @namespace == rhs.namespace and @name == rhs.name
47
+ end
48
+
49
+ def ===(rhs)
50
+ (self == rhs)
51
+ end
52
+
53
+ def eql?(rhs)
54
+ (self == rhs)
55
+ end
56
+
57
+ def hash
58
+ @namespace.hash ^ @name.hash
59
+ end
60
+
61
+ def to_s
62
+ "{#{ namespace }}#{ name }"
63
+ end
64
+
65
+ def inspect
66
+ sprintf("#<%s:0x%x %s>", self.class.name, __id__,
67
+ "{#{ namespace }}#{ name }")
68
+ end
69
+
70
+ NormalizedNameRegexp = /^\{([^}]*)\}(.*)$/
71
+ def parse(str)
72
+ NormalizedNameRegexp =~ str
73
+ self.new($1, $2)
74
+ end
75
+
76
+ EMPTY = QName.new.freeze
77
+ end
78
+
79
+
80
+ end
@@ -0,0 +1,136 @@
1
+ # encoding: UTF-8
2
+ # XSD4R - XMLParser XML parser library.
3
+ # Copyright (C) 2000-2007 NAKAMURA, Hiroshi <nahi@ruby-lang.org>.
4
+
5
+ # This program is copyrighted free software by NAKAMURA, Hiroshi. You can
6
+ # redistribute it and/or modify it under the same terms of Ruby's license;
7
+ # either the dual license version in 2003, or any later version.
8
+
9
+ ### WIP, 2015-June-13:
10
+ ###
11
+ ### LibXML drops namespaces on Elements *AND* Attributes, which makes it impossible
12
+ ### to correctly associate Namespaces on Namespace-Declared Element Attributes when
13
+ ### more than one namespace exists.
14
+ ###
15
+ ### This issue is evident when you run test/soap/test_cookie.rb
16
+ ###
17
+
18
+ require 'libxml'
19
+
20
+ module XSD
21
+ module XMLParser
22
+
23
+
24
+ class LibXMLParser < XSD::XMLParser::Parser
25
+ include ::LibXML::XML::SaxParser::Callbacks
26
+
27
+ def do_parse(string_or_readable)
28
+ $stderr.puts "XSD::XMLParser::LibXMLParser.do_parse" if $DEBUG
29
+ # string = string_or_readable.respond_to?(:read) ? string_or_readable.read : string_or_readable
30
+
31
+ @charset = 'utf-8'
32
+ string = StringIO.new(string_or_readable)
33
+ parser = LibXML::XML::SaxParser.io(string)
34
+ parser.callbacks = self
35
+ parser.parse
36
+ end
37
+
38
+ ENTITY_REF_MAP = {
39
+ 'lt' => '<',
40
+ 'gt' => '>',
41
+ 'amp' => '&',
42
+ 'quot' => '"',
43
+ 'apos' => '\''
44
+ }
45
+
46
+ #def on_internal_subset(name, external_id, system_id)
47
+ # nil
48
+ #end
49
+
50
+ #def on_is_standalone()
51
+ # nil
52
+ #end
53
+
54
+ #def on_has_internal_subset()
55
+ # nil
56
+ #end
57
+
58
+ #def on_has_external_subset()
59
+ # nil
60
+ #end
61
+
62
+ #def on_start_document()
63
+ # nil
64
+ #end
65
+
66
+ #def on_end_document()
67
+ # nil
68
+ #end
69
+
70
+ def on_start_element_ns (name, attr_hash, prefix, uri, namespaces)
71
+ prefixed_ns = attr_hash.merge(Hash[namespaces.map{|k,v| ["xmlns:#{k}",v]}])
72
+ if prefix.nil?
73
+ start_element(name, prefixed_ns)
74
+ else
75
+ start_element("#{prefix}:#{name}", prefixed_ns)
76
+ end
77
+ end
78
+
79
+ def on_end_element_ns (name, prefix, uri)
80
+ if prefix.nil?
81
+ end_element(name)
82
+ else
83
+ end_element("#{prefix}:#{name}")
84
+ end
85
+ end
86
+
87
+ def on_start_element (name, attr_hash)
88
+ # start_element(name, attr_hash)
89
+ end
90
+
91
+ def on_end_element(name)
92
+ # end_element(name)
93
+ end
94
+
95
+ def on_reference(name)
96
+ characters(ENTITY_REF_MAP[name])
97
+ end
98
+
99
+ def on_characters(chars)
100
+ characters(chars)
101
+ end
102
+
103
+ #def on_processing_instruction(target, data)
104
+ # nil
105
+ #end
106
+
107
+ #def on_comment(msg)
108
+ # nil
109
+ #end
110
+
111
+ def on_parser_warning(msg)
112
+ warn(msg)
113
+ end
114
+
115
+ def on_parser_error(msg)
116
+ raise ParseError.new(msg)
117
+ end
118
+
119
+ def on_parser_fatal_error(msg)
120
+ raise ParseError.new(msg)
121
+ end
122
+
123
+ def on_cdata_block(cdata)
124
+ characters(cdata)
125
+ end
126
+
127
+ def on_external_subset(name, external_id, system_id)
128
+ nil
129
+ end
130
+
131
+ add_factory(self)
132
+ end
133
+
134
+
135
+ end
136
+ end
@@ -0,0 +1,63 @@
1
+ # encoding: UTF-8
2
+ # XSD4R - Nokogiri XML parser library.
3
+ # Copyright (C) 2015 Laurence A. Lee <rubyjedi@gmail.com>
4
+
5
+ # This program is copyrighted free software by Laurence A. Lee. You can
6
+ # redistribute it and/or modify it under the same terms of Ruby's license;
7
+ # either the dual license version in 2003, or any later version.
8
+
9
+ require 'nokogiri'
10
+
11
+ module XSD
12
+ module XMLParser
13
+
14
+ class NokogiriParser < XSD::XMLParser::Parser
15
+ def do_parse(string_or_readable)
16
+ $stderr.puts "XSD::XMLParser::NokogiriParser.do_parse" if $DEBUG
17
+ handler = NokoDocHandler.new(self)
18
+ parser = Nokogiri::XML::SAX::Parser.new(handler)
19
+ parser.parse(string_or_readable)
20
+ end
21
+
22
+ add_factory(self)
23
+
24
+ public :start_element
25
+ public :end_element
26
+ public :characters
27
+ public :xmldecl_encoding=
28
+ end
29
+
30
+
31
+ class NokoDocHandler < Nokogiri::XML::SAX::Document
32
+ def initialize(owner)
33
+ @owner = (owner)
34
+ end
35
+
36
+ def xmldecl(version, encoding, standalone)
37
+ @owner.xmldecl_encoding= encoding
38
+ end
39
+
40
+ def start_element(name,attrs)
41
+ @owner.start_element(name,Hash[*attrs.flatten])
42
+ end
43
+
44
+ def end_element(name)
45
+ @owner.end_element(name)
46
+ end
47
+
48
+ def cdata_block(t)
49
+ @owner.characters(t)
50
+ end
51
+
52
+ def characters(t)
53
+ @owner.characters(t)
54
+ end
55
+
56
+ def comment(t)
57
+ @owner.characters(t)
58
+ end
59
+ end
60
+
61
+
62
+ end
63
+ end