soap2r 1.5.8

Sign up to get free protection for your applications and to get access to all the features.
Files changed (161) hide show
  1. data/bin/wsdl2ruby.rb +137 -0
  2. data/bin/xsd2ruby.rb +90 -0
  3. data/lib/soap/attachment.rb +108 -0
  4. data/lib/soap/attrproxy.rb +34 -0
  5. data/lib/soap/baseData.rb +1094 -0
  6. data/lib/soap/element.rb +277 -0
  7. data/lib/soap/encodingstyle/aspDotNetHandler.rb +207 -0
  8. data/lib/soap/encodingstyle/handler.rb +120 -0
  9. data/lib/soap/encodingstyle/literalHandler.rb +195 -0
  10. data/lib/soap/encodingstyle/soapHandler.rb +559 -0
  11. data/lib/soap/filter.rb +13 -0
  12. data/lib/soap/filter/filterchain.rb +51 -0
  13. data/lib/soap/filter/handler.rb +31 -0
  14. data/lib/soap/filter/streamhandler.rb +29 -0
  15. data/lib/soap/generator.rb +299 -0
  16. data/lib/soap/header/handler.rb +61 -0
  17. data/lib/soap/header/handlerset.rb +70 -0
  18. data/lib/soap/header/mappinghandler.rb +47 -0
  19. data/lib/soap/header/simplehandler.rb +44 -0
  20. data/lib/soap/httpconfigloader.rb +141 -0
  21. data/lib/soap/mapping.rb +12 -0
  22. data/lib/soap/mapping/encodedregistry.rb +537 -0
  23. data/lib/soap/mapping/factory.rb +388 -0
  24. data/lib/soap/mapping/literalregistry.rb +391 -0
  25. data/lib/soap/mapping/mapping.rb +576 -0
  26. data/lib/soap/mapping/registry.rb +295 -0
  27. data/lib/soap/mapping/rubytypeFactory.rb +446 -0
  28. data/lib/soap/mapping/schemadefinition.rb +170 -0
  29. data/lib/soap/mapping/typeMap.rb +106 -0
  30. data/lib/soap/mapping/wsdlencodedregistry.rb +211 -0
  31. data/lib/soap/mapping/wsdlliteralregistry.rb +248 -0
  32. data/lib/soap/marshal.rb +59 -0
  33. data/lib/soap/mimemessage.rb +241 -0
  34. data/lib/soap/nestedexception.rb +42 -0
  35. data/lib/soap/netHttpClient.rb +241 -0
  36. data/lib/soap/ns.rb +34 -0
  37. data/lib/soap/parser.rb +252 -0
  38. data/lib/soap/processor.rb +66 -0
  39. data/lib/soap/property.rb +319 -0
  40. data/lib/soap/proxy.rb +14 -0
  41. data/lib/soap/rpc/cgistub.rb +247 -0
  42. data/lib/soap/rpc/driver.rb +221 -0
  43. data/lib/soap/rpc/element.rb +374 -0
  44. data/lib/soap/rpc/httpserver.rb +142 -0
  45. data/lib/soap/rpc/methodDef.rb +68 -0
  46. data/lib/soap/rpc/proxy.rb +572 -0
  47. data/lib/soap/rpc/router.rb +662 -0
  48. data/lib/soap/rpc/rpc.rb +25 -0
  49. data/lib/soap/rpc/soaplet.rb +200 -0
  50. data/lib/soap/rpc/standaloneServer.rb +43 -0
  51. data/lib/soap/soap.rb +151 -0
  52. data/lib/soap/streamHandler.rb +301 -0
  53. data/lib/soap/wsdlDriver.rb +164 -0
  54. data/lib/wsdl/binding.rb +65 -0
  55. data/lib/wsdl/data.rb +64 -0
  56. data/lib/wsdl/definitions.rb +236 -0
  57. data/lib/wsdl/documentation.rb +32 -0
  58. data/lib/wsdl/import.rb +80 -0
  59. data/lib/wsdl/importer.rb +38 -0
  60. data/lib/wsdl/info.rb +50 -0
  61. data/lib/wsdl/message.rb +54 -0
  62. data/lib/wsdl/operation.rb +151 -0
  63. data/lib/wsdl/operationBinding.rb +240 -0
  64. data/lib/wsdl/param.rb +93 -0
  65. data/lib/wsdl/parser.rb +164 -0
  66. data/lib/wsdl/part.rb +52 -0
  67. data/lib/wsdl/port.rb +66 -0
  68. data/lib/wsdl/portType.rb +75 -0
  69. data/lib/wsdl/service.rb +61 -0
  70. data/lib/wsdl/soap/address.rb +40 -0
  71. data/lib/wsdl/soap/binding.rb +49 -0
  72. data/lib/wsdl/soap/body.rb +58 -0
  73. data/lib/wsdl/soap/cgiStubCreator.rb +92 -0
  74. data/lib/wsdl/soap/classDefCreator.rb +433 -0
  75. data/lib/wsdl/soap/classDefCreatorSupport.rb +240 -0
  76. data/lib/wsdl/soap/classNameCreator.rb +54 -0
  77. data/lib/wsdl/soap/clientSkeltonCreator.rb +104 -0
  78. data/lib/wsdl/soap/complexType.rb +173 -0
  79. data/lib/wsdl/soap/data.rb +42 -0
  80. data/lib/wsdl/soap/definitions.rb +200 -0
  81. data/lib/wsdl/soap/driverCreator.rb +118 -0
  82. data/lib/wsdl/soap/element.rb +33 -0
  83. data/lib/wsdl/soap/encodedMappingRegistryCreator.rb +73 -0
  84. data/lib/wsdl/soap/fault.rb +56 -0
  85. data/lib/wsdl/soap/header.rb +86 -0
  86. data/lib/wsdl/soap/headerfault.rb +56 -0
  87. data/lib/wsdl/soap/literalMappingRegistryCreator.rb +115 -0
  88. data/lib/wsdl/soap/mappingRegistryCreator.rb +58 -0
  89. data/lib/wsdl/soap/mappingRegistryCreatorSupport.rb +376 -0
  90. data/lib/wsdl/soap/methodDefCreator.rb +199 -0
  91. data/lib/wsdl/soap/operation.rb +112 -0
  92. data/lib/wsdl/soap/servantSkeltonCreator.rb +89 -0
  93. data/lib/wsdl/soap/servletStubCreator.rb +104 -0
  94. data/lib/wsdl/soap/standaloneServerStubCreator.rb +100 -0
  95. data/lib/wsdl/soap/wsdl2ruby.rb +217 -0
  96. data/lib/wsdl/types.rb +44 -0
  97. data/lib/wsdl/wsdl.rb +24 -0
  98. data/lib/wsdl/xmlSchema/all.rb +24 -0
  99. data/lib/wsdl/xmlSchema/annotation.rb +34 -0
  100. data/lib/wsdl/xmlSchema/any.rb +61 -0
  101. data/lib/wsdl/xmlSchema/anyAttribute.rb +48 -0
  102. data/lib/wsdl/xmlSchema/attribute.rb +104 -0
  103. data/lib/wsdl/xmlSchema/attributeGroup.rb +68 -0
  104. data/lib/wsdl/xmlSchema/choice.rb +58 -0
  105. data/lib/wsdl/xmlSchema/complexContent.rb +97 -0
  106. data/lib/wsdl/xmlSchema/complexExtension.rb +119 -0
  107. data/lib/wsdl/xmlSchema/complexRestriction.rb +104 -0
  108. data/lib/wsdl/xmlSchema/complexType.rb +193 -0
  109. data/lib/wsdl/xmlSchema/content.rb +95 -0
  110. data/lib/wsdl/xmlSchema/data.rb +116 -0
  111. data/lib/wsdl/xmlSchema/element.rb +153 -0
  112. data/lib/wsdl/xmlSchema/enumeration.rb +36 -0
  113. data/lib/wsdl/xmlSchema/fractiondigits.rb +37 -0
  114. data/lib/wsdl/xmlSchema/group.rb +100 -0
  115. data/lib/wsdl/xmlSchema/import.rb +53 -0
  116. data/lib/wsdl/xmlSchema/importHandler.rb +45 -0
  117. data/lib/wsdl/xmlSchema/importer.rb +102 -0
  118. data/lib/wsdl/xmlSchema/include.rb +48 -0
  119. data/lib/wsdl/xmlSchema/length.rb +37 -0
  120. data/lib/wsdl/xmlSchema/list.rb +48 -0
  121. data/lib/wsdl/xmlSchema/maxexclusive.rb +37 -0
  122. data/lib/wsdl/xmlSchema/maxinclusive.rb +37 -0
  123. data/lib/wsdl/xmlSchema/maxlength.rb +37 -0
  124. data/lib/wsdl/xmlSchema/minexclusive.rb +37 -0
  125. data/lib/wsdl/xmlSchema/mininclusive.rb +37 -0
  126. data/lib/wsdl/xmlSchema/minlength.rb +37 -0
  127. data/lib/wsdl/xmlSchema/parser.rb +167 -0
  128. data/lib/wsdl/xmlSchema/pattern.rb +36 -0
  129. data/lib/wsdl/xmlSchema/ref.rb +33 -0
  130. data/lib/wsdl/xmlSchema/schema.rb +178 -0
  131. data/lib/wsdl/xmlSchema/sequence.rb +54 -0
  132. data/lib/wsdl/xmlSchema/simpleContent.rb +69 -0
  133. data/lib/wsdl/xmlSchema/simpleExtension.rb +62 -0
  134. data/lib/wsdl/xmlSchema/simpleRestriction.rb +132 -0
  135. data/lib/wsdl/xmlSchema/simpleType.rb +87 -0
  136. data/lib/wsdl/xmlSchema/totaldigits.rb +37 -0
  137. data/lib/wsdl/xmlSchema/union.rb +35 -0
  138. data/lib/wsdl/xmlSchema/unique.rb +34 -0
  139. data/lib/wsdl/xmlSchema/whitespace.rb +37 -0
  140. data/lib/wsdl/xmlSchema/xsd2ruby.rb +174 -0
  141. data/lib/xsd/charset.rb +193 -0
  142. data/lib/xsd/codegen.rb +12 -0
  143. data/lib/xsd/codegen/classdef.rb +208 -0
  144. data/lib/xsd/codegen/commentdef.rb +34 -0
  145. data/lib/xsd/codegen/gensupport.rb +273 -0
  146. data/lib/xsd/codegen/methoddef.rb +70 -0
  147. data/lib/xsd/codegen/moduledef.rb +208 -0
  148. data/lib/xsd/datatypes.rb +1466 -0
  149. data/lib/xsd/datatypes1999.rb +20 -0
  150. data/lib/xsd/iconvcharset.rb +39 -0
  151. data/lib/xsd/mapping.rb +68 -0
  152. data/lib/xsd/namedelements.rb +132 -0
  153. data/lib/xsd/ns.rb +182 -0
  154. data/lib/xsd/qname.rb +79 -0
  155. data/lib/xsd/xmlparser.rb +76 -0
  156. data/lib/xsd/xmlparser/libxmlparser.rb +115 -0
  157. data/lib/xsd/xmlparser/parser.rb +100 -0
  158. data/lib/xsd/xmlparser/rexmlparser.rb +58 -0
  159. data/lib/xsd/xmlparser/xmlparser.rb +50 -0
  160. data/lib/xsd/xmlparser/xmlscanner.rb +149 -0
  161. metadata +224 -0
@@ -0,0 +1,20 @@
1
+ # XSD4R - XML Schema Datatype 1999 support
2
+ # Copyright (C) 2000-2007 NAKAMURA, Hiroshi <nahi@ruby-lang.org>.
3
+
4
+ # This program is copyrighted free software by NAKAMURA, Hiroshi. You can
5
+ # redistribute it and/or modify it under the same terms of Ruby's license;
6
+ # either the dual license version in 2003, or any later version.
7
+
8
+
9
+ require 'xsd/datatypes'
10
+
11
+
12
+ module XSD
13
+ Namespace.replace('http://www.w3.org/1999/XMLSchema')
14
+ InstanceNamespace.replace('http://www.w3.org/1999/XMLSchema-instance')
15
+ AnyTypeLiteral.replace('ur-type')
16
+ AnySimpleTypeLiteral.replace('ur-type')
17
+ NilLiteral.replace('null')
18
+ NilValue.replace('1')
19
+ DateTimeLiteral.replace('timeInstant')
20
+ end
@@ -0,0 +1,39 @@
1
+ # XSD4R - Charset handling with iconv.
2
+ # Copyright (C) 2000-2007 NAKAMURA, Hiroshi <nahi@ruby-lang.org>.
3
+
4
+ # This program is copyrighted free software by NAKAMURA, Hiroshi. You can
5
+ # redistribute it and/or modify it under the same terms of Ruby's license;
6
+ # either the dual license version in 2003, or any later version.
7
+
8
+ unless ''.respond_to? :encode
9
+ require 'iconv'
10
+ end
11
+
12
+ module XSD
13
+
14
+
15
+ class IconvCharset
16
+ if ''.respond_to? :encode
17
+ def self.safe_iconv(to, from, str)
18
+ str.encode(to, from, :invalid => :replace, :undef => :replace, :replace => '?')
19
+ end
20
+ else
21
+ def self.safe_iconv(to, from, str)
22
+ iconv = Iconv.new(to, from)
23
+ out = ""
24
+ begin
25
+ out << iconv.iconv(str)
26
+ rescue Iconv::IllegalSequence => e
27
+ out << e.success
28
+ ch, str = e.failed.split(//, 2)
29
+ out << '?'
30
+ warn("Failed to convert #{ch}")
31
+ retry
32
+ end
33
+ return out
34
+ end
35
+ end
36
+ end
37
+
38
+
39
+ end
@@ -0,0 +1,68 @@
1
+ # XSD4R - XML Mapping for Ruby
2
+ # Copyright (C) 2000-2007 NAKAMURA, Hiroshi <nahi@ruby-lang.org>.
3
+
4
+ # This program is copyrighted free software by NAKAMURA, Hiroshi. You can
5
+ # redistribute it and/or modify it under the same terms of Ruby's license;
6
+ # either the dual license version in 2003, or any later version.
7
+
8
+
9
+ require "soap/parser"
10
+ require 'soap/encodingstyle/literalHandler'
11
+ require "soap/generator"
12
+ require "soap/mapping"
13
+ require "soap/mapping/wsdlliteralregistry"
14
+
15
+
16
+ module XSD
17
+
18
+
19
+ module Mapping
20
+ MappingRegistry = SOAP::Mapping::LiteralRegistry.new
21
+
22
+ def self.obj2xml(obj, elename = nil, io = nil)
23
+ Mapper.new(MappingRegistry).obj2xml(obj, elename, io)
24
+ end
25
+
26
+ def self.xml2obj(stream, klass = nil)
27
+ Mapper.new(MappingRegistry).xml2obj(stream, klass)
28
+ end
29
+
30
+ class Mapper
31
+ MAPPING_OPT = {
32
+ :default_encodingstyle => SOAP::LiteralNamespace,
33
+ :generate_explicit_type => false,
34
+ :root_type_hint => true
35
+ }.freeze
36
+
37
+ def initialize(registry)
38
+ @registry = registry
39
+ end
40
+
41
+ def obj2xml(obj, elename = nil, io = nil)
42
+ opt = MAPPING_OPT.dup
43
+ unless elename
44
+ if definition = @registry.elename_schema_definition_from_class(obj.class)
45
+ elename = definition.elename
46
+ opt[:root_type_hint] = false
47
+ end
48
+ end
49
+ elename = SOAP::Mapping.to_qname(elename) if elename
50
+ soap = SOAP::Mapping.obj2soap(obj, @registry, elename, opt)
51
+ if soap.elename.nil? or soap.elename == XSD::QName::EMPTY
52
+ soap.elename =
53
+ XSD::QName.new(nil, SOAP::Mapping.name2elename(obj.class.to_s))
54
+ end
55
+ generator = SOAP::Generator.new(opt)
56
+ generator.generate(soap, io)
57
+ end
58
+
59
+ def xml2obj(stream, klass = nil)
60
+ parser = SOAP::Parser.new(MAPPING_OPT)
61
+ soap = parser.parse(stream)
62
+ SOAP::Mapping.soap2obj(soap, @registry, klass)
63
+ end
64
+ end
65
+ end
66
+
67
+
68
+ end
@@ -0,0 +1,132 @@
1
+ # XSD4R - WSDL named element collection.
2
+ # Copyright (C) 2000-2007 NAKAMURA, Hiroshi <nahi@ruby-lang.org>.
3
+
4
+ # This program is copyrighted free software by NAKAMURA, Hiroshi. You can
5
+ # redistribute it and/or modify it under the same terms of Ruby's license;
6
+ # either the dual license version in 2003, or any later version.
7
+
8
+
9
+ module XSD
10
+
11
+
12
+ class NamedElements
13
+ include Enumerable
14
+
15
+ def initialize
16
+ @elements = []
17
+ @cache = {}
18
+ end
19
+
20
+ def dup
21
+ o = NamedElements.new
22
+ o.elements = @elements.dup
23
+ o
24
+ end
25
+
26
+ def freeze
27
+ super
28
+ @elements.freeze
29
+ self
30
+ end
31
+
32
+ def empty?
33
+ size == 0
34
+ end
35
+
36
+ def size
37
+ @elements.size
38
+ end
39
+
40
+ def [](idx)
41
+ if idx.is_a?(Numeric)
42
+ @elements[idx]
43
+ else
44
+ @cache[idx] ||= @elements.find { |item| item.name == idx }
45
+ end
46
+ end
47
+
48
+ def find_name(name)
49
+ @elements.find { |item| item.name.name == name }
50
+ end
51
+
52
+ def keys
53
+ collect { |element| element.name }
54
+ end
55
+
56
+ def each
57
+ @elements.each do |element|
58
+ yield(element)
59
+ end
60
+ end
61
+
62
+ def <<(rhs)
63
+ @elements << rhs
64
+ self
65
+ end
66
+
67
+ def delete(rhs)
68
+ rv = @elements.delete(rhs)
69
+ @cache.clear
70
+ rv
71
+ end
72
+
73
+ def +(rhs)
74
+ o = NamedElements.new
75
+ o.elements = @elements + rhs.elements
76
+ @cache.clear
77
+ o
78
+ end
79
+
80
+ def concat(rhs)
81
+ @elements.concat(rhs.elements)
82
+ @cache.clear
83
+ self
84
+ end
85
+
86
+ def uniq
87
+ o = NamedElements.new
88
+ o.elements = uniq_elements
89
+ o
90
+ end
91
+
92
+ def uniq!
93
+ @elements.replace(uniq_elements)
94
+ @cache.clear
95
+ end
96
+
97
+ def find_all
98
+ o = NamedElements.new
99
+ each do |ele|
100
+ o << ele if yield(ele)
101
+ end
102
+ o
103
+ end
104
+
105
+ Empty = NamedElements.new.freeze
106
+
107
+ protected
108
+
109
+ def elements=(rhs)
110
+ @elements = rhs
111
+ end
112
+
113
+ def elements
114
+ @elements
115
+ end
116
+
117
+ private
118
+
119
+ def uniq_elements
120
+ dict = {}
121
+ elements = []
122
+ @elements.each do |ele|
123
+ unless dict.key?(ele.name)
124
+ dict[ele.name] = ele
125
+ elements << ele
126
+ end
127
+ end
128
+ elements
129
+ end
130
+ end
131
+
132
+ end
@@ -0,0 +1,182 @@
1
+ # XSD4R - XML Schema Namespace library
2
+ # Copyright (C) 2000-2007 NAKAMURA, Hiroshi <nahi@ruby-lang.org>.
3
+
4
+ # This program is copyrighted free software by NAKAMURA, Hiroshi. You can
5
+ # redistribute it and/or modify it under the same terms of Ruby's license;
6
+ # either the dual license version in 2003, or any later version.
7
+
8
+
9
+ require 'xsd/datatypes'
10
+
11
+
12
+ module XSD
13
+
14
+
15
+ class NS
16
+ Namespace = 'http://www.w3.org/XML/1998/namespace'
17
+
18
+ KNOWN_TAG = {
19
+ XSD::Namespace => 'xsd',
20
+ XSD::InstanceNamespace => 'xsi',
21
+ }
22
+
23
+ class Assigner
24
+ attr_reader :known_tag
25
+
26
+ def initialize(known_tag)
27
+ @known_tag = known_tag.dup
28
+ @count = 0
29
+ end
30
+
31
+ def assign(ns)
32
+ if @known_tag.key?(ns)
33
+ return @known_tag[ns]
34
+ end
35
+ @count += 1
36
+ "n#{@count}"
37
+ end
38
+ end
39
+
40
+ attr_reader :default_namespace
41
+
42
+ class FormatError < Error; end
43
+
44
+ public
45
+
46
+ def initialize(tag2ns = nil)
47
+ @tag2ns = tag2ns || ns_default
48
+ @ns2tag = @tag2ns.invert
49
+ @assigner = nil
50
+ @default_namespace = nil
51
+ end
52
+
53
+ def known_tag
54
+ @assigner ||= Assigner.new(default_known_tag)
55
+ @assigner.known_tag
56
+ end
57
+
58
+ def assign(ns, tag = nil)
59
+ if tag == ''
60
+ if ns.empty?
61
+ @default_namespace = nil
62
+ else
63
+ @default_namespace = ns
64
+ end
65
+ tag
66
+ else
67
+ @assigner ||= Assigner.new(default_known_tag)
68
+ tag ||= @assigner.assign(ns)
69
+ @ns2tag[ns] = tag
70
+ @tag2ns[tag] = ns
71
+ tag
72
+ end
73
+ end
74
+
75
+ def assigned?(ns)
76
+ @default_namespace == ns or @ns2tag.key?(ns)
77
+ end
78
+
79
+ def assigned_as_tagged?(ns)
80
+ @ns2tag.key?(ns)
81
+ end
82
+
83
+ def assigned_tag?(tag)
84
+ @tag2ns.key?(tag)
85
+ end
86
+
87
+ def clone_ns
88
+ cloned = self.class.new(@tag2ns.dup)
89
+ cloned.assigner = @assigner
90
+ cloned.assign(@default_namespace, '') if @default_namespace
91
+ cloned
92
+ end
93
+
94
+ def name(qname)
95
+ if qname.namespace == @default_namespace
96
+ qname.name
97
+ elsif tag = @ns2tag[qname.namespace]
98
+ "#{tag}:#{qname.name}"
99
+ else
100
+ raise FormatError.new("namespace: #{qname.namespace} not defined yet")
101
+ end
102
+ end
103
+
104
+ # no default namespace
105
+ def name_attr(qname)
106
+ if tag = @ns2tag[qname.namespace]
107
+ "#{tag}:#{qname.name}"
108
+ else
109
+ raise FormatError.new("namespace: #{qname.namespace} not defined yet")
110
+ end
111
+ end
112
+
113
+ def compare(ns, name, rhs)
114
+ if (ns == @default_namespace)
115
+ return true if (name == rhs)
116
+ end
117
+ @tag2ns.each do |assigned_tag, assigned_ns|
118
+ if assigned_ns == ns && "#{assigned_tag}:#{name}" == rhs
119
+ return true
120
+ end
121
+ end
122
+ false
123
+ end
124
+
125
+ # $1 and $2 are necessary.
126
+ ParseRegexp = Regexp.new('\A([^:]+)(?::(.+))?\z', nil, 'NONE')
127
+
128
+ def parse(str, local = false)
129
+ if ParseRegexp =~ str
130
+ if (name = $2) and (ns = @tag2ns[$1])
131
+ return XSD::QName.new(ns, name)
132
+ end
133
+ end
134
+ XSD::QName.new(local ? nil : @default_namespace, str)
135
+ end
136
+
137
+ # For local attribute key parsing
138
+ # <foo xmlns="urn:a" xmlns:n1="urn:a" bar="1" n1:baz="2" />
139
+ # =>
140
+ # {}bar, {urn:a}baz
141
+ def parse_local(elem)
142
+ ParseRegexp =~ elem
143
+ if $2
144
+ ns = @tag2ns[$1]
145
+ name = $2
146
+ if !ns
147
+ raise FormatError.new("unknown namespace qualifier: #{$1}")
148
+ end
149
+ elsif $1
150
+ ns = nil
151
+ name = $1
152
+ else
153
+ raise FormatError.new("illegal element format: #{elem}")
154
+ end
155
+ XSD::QName.new(ns, name)
156
+ end
157
+
158
+ def each_ns
159
+ @ns2tag.each do |ns, tag|
160
+ yield(ns, tag)
161
+ end
162
+ end
163
+
164
+ protected
165
+
166
+ def assigner=(assigner)
167
+ @assigner = assigner
168
+ end
169
+
170
+ private
171
+
172
+ def ns_default
173
+ {'xml' => Namespace}
174
+ end
175
+
176
+ def default_known_tag
177
+ KNOWN_TAG
178
+ end
179
+ end
180
+
181
+
182
+ end
@@ -0,0 +1,79 @@
1
+ # XSD4R - XML QName definition.
2
+ # Copyright (C) 2000-2007 NAKAMURA, Hiroshi <nahi@ruby-lang.org>.
3
+
4
+ # This program is copyrighted free software by NAKAMURA, Hiroshi. You can
5
+ # redistribute it and/or modify it under the same terms of Ruby's license;
6
+ # either the dual license version in 2003, or any later version.
7
+
8
+
9
+ module XSD
10
+
11
+
12
+ class QName
13
+ attr_reader :namespace
14
+ attr_reader :name
15
+ attr_accessor :source
16
+
17
+ def initialize(namespace = nil, name = nil)
18
+ @namespace = namespace
19
+ @name = name
20
+ @source = nil
21
+ end
22
+
23
+ def dup_name(name)
24
+ XSD::QName.new(@namespace, name)
25
+ end
26
+
27
+ def dump(predefined_ns = nil)
28
+ ns = predefined_ns
29
+ ns ||= @namespace.nil? ? 'nil' : @namespace.dump
30
+ name = @name.nil? ? 'nil' : @name.dump
31
+ "XSD::QName.new(#{ns}, #{name})"
32
+ end
33
+
34
+ def match(rhs)
35
+ if rhs.namespace and (rhs.namespace != @namespace)
36
+ return false
37
+ end
38
+ if rhs.name and (rhs.name != @name)
39
+ return false
40
+ end
41
+ true
42
+ end
43
+
44
+ def ==(rhs)
45
+ !rhs.nil? and @namespace == rhs.namespace and @name == rhs.name
46
+ end
47
+
48
+ def ===(rhs)
49
+ (self == rhs)
50
+ end
51
+
52
+ def eql?(rhs)
53
+ (self == rhs)
54
+ end
55
+
56
+ def hash
57
+ @namespace.hash ^ @name.hash
58
+ end
59
+
60
+ def to_s
61
+ "{#{ namespace }}#{ name }"
62
+ end
63
+
64
+ def inspect
65
+ sprintf("#<%s:0x%x %s>", self.class.name, __id__,
66
+ "{#{ namespace }}#{ name }")
67
+ end
68
+
69
+ NormalizedNameRegexp = /^\{([^}]*)\}(.*)$/
70
+ def parse(str)
71
+ NormalizedNameRegexp =~ str
72
+ self.new($1, $2)
73
+ end
74
+
75
+ EMPTY = QName.new.freeze
76
+ end
77
+
78
+
79
+ end