tomdz-soap4r 1.5.8.20111103171510

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 (427) hide show
  1. data/bin/wsdl2ruby.rb +139 -0
  2. data/bin/xsd2ruby.rb +91 -0
  3. data/lib/soap/attachment.rb +109 -0
  4. data/lib/soap/attrproxy.rb +35 -0
  5. data/lib/soap/baseData.rb +1095 -0
  6. data/lib/soap/element.rb +278 -0
  7. data/lib/soap/encodingstyle/aspDotNetHandler.rb +208 -0
  8. data/lib/soap/encodingstyle/handler.rb +121 -0
  9. data/lib/soap/encodingstyle/literalHandler.rb +196 -0
  10. data/lib/soap/encodingstyle/soapHandler.rb +560 -0
  11. data/lib/soap/filter.rb +14 -0
  12. data/lib/soap/filter/filterchain.rb +52 -0
  13. data/lib/soap/filter/handler.rb +32 -0
  14. data/lib/soap/filter/streamhandler.rb +30 -0
  15. data/lib/soap/generator.rb +299 -0
  16. data/lib/soap/header/handler.rb +62 -0
  17. data/lib/soap/header/handlerset.rb +71 -0
  18. data/lib/soap/header/mappinghandler.rb +48 -0
  19. data/lib/soap/header/simplehandler.rb +45 -0
  20. data/lib/soap/httpconfigloader.rb +140 -0
  21. data/lib/soap/mapping.rb +13 -0
  22. data/lib/soap/mapping/encodedregistry.rb +539 -0
  23. data/lib/soap/mapping/factory.rb +389 -0
  24. data/lib/soap/mapping/literalregistry.rb +392 -0
  25. data/lib/soap/mapping/mapping.rb +577 -0
  26. data/lib/soap/mapping/registry.rb +296 -0
  27. data/lib/soap/mapping/rubytypeFactory.rb +446 -0
  28. data/lib/soap/mapping/schemadefinition.rb +171 -0
  29. data/lib/soap/mapping/typeMap.rb +107 -0
  30. data/lib/soap/mapping/wsdlencodedregistry.rb +212 -0
  31. data/lib/soap/mapping/wsdlliteralregistry.rb +249 -0
  32. data/lib/soap/marshal.rb +60 -0
  33. data/lib/soap/mimemessage.rb +243 -0
  34. data/lib/soap/nestedexception.rb +43 -0
  35. data/lib/soap/netHttpClient.rb +242 -0
  36. data/lib/soap/ns.rb +39 -0
  37. data/lib/soap/parser.rb +253 -0
  38. data/lib/soap/processor.rb +67 -0
  39. data/lib/soap/property.rb +340 -0
  40. data/lib/soap/proxy.rb +15 -0
  41. data/lib/soap/rpc/cgistub.rb +248 -0
  42. data/lib/soap/rpc/driver.rb +222 -0
  43. data/lib/soap/rpc/element.rb +375 -0
  44. data/lib/soap/rpc/httpserver.rb +143 -0
  45. data/lib/soap/rpc/methodDef.rb +69 -0
  46. data/lib/soap/rpc/proxy.rb +573 -0
  47. data/lib/soap/rpc/router.rb +663 -0
  48. data/lib/soap/rpc/rpc.rb +26 -0
  49. data/lib/soap/rpc/soaplet.rb +201 -0
  50. data/lib/soap/rpc/standaloneServer.rb +44 -0
  51. data/lib/soap/soap.rb +154 -0
  52. data/lib/soap/streamHandler.rb +302 -0
  53. data/lib/soap/version.rb +9 -0
  54. data/lib/soap/wsdlDriver.rb +165 -0
  55. data/lib/wsdl/binding.rb +66 -0
  56. data/lib/wsdl/data.rb +65 -0
  57. data/lib/wsdl/definitions.rb +237 -0
  58. data/lib/wsdl/documentation.rb +33 -0
  59. data/lib/wsdl/import.rb +81 -0
  60. data/lib/wsdl/importer.rb +39 -0
  61. data/lib/wsdl/info.rb +51 -0
  62. data/lib/wsdl/message.rb +55 -0
  63. data/lib/wsdl/operation.rb +152 -0
  64. data/lib/wsdl/operationBinding.rb +241 -0
  65. data/lib/wsdl/param.rb +94 -0
  66. data/lib/wsdl/parser.rb +165 -0
  67. data/lib/wsdl/part.rb +53 -0
  68. data/lib/wsdl/port.rb +67 -0
  69. data/lib/wsdl/portType.rb +76 -0
  70. data/lib/wsdl/service.rb +62 -0
  71. data/lib/wsdl/soap/address.rb +41 -0
  72. data/lib/wsdl/soap/binding.rb +50 -0
  73. data/lib/wsdl/soap/body.rb +59 -0
  74. data/lib/wsdl/soap/cgiStubCreator.rb +93 -0
  75. data/lib/wsdl/soap/classDefCreator.rb +434 -0
  76. data/lib/wsdl/soap/classDefCreatorSupport.rb +241 -0
  77. data/lib/wsdl/soap/classNameCreator.rb +55 -0
  78. data/lib/wsdl/soap/clientSkeltonCreator.rb +107 -0
  79. data/lib/wsdl/soap/complexType.rb +174 -0
  80. data/lib/wsdl/soap/data.rb +43 -0
  81. data/lib/wsdl/soap/definitions.rb +201 -0
  82. data/lib/wsdl/soap/driverCreator.rb +121 -0
  83. data/lib/wsdl/soap/element.rb +34 -0
  84. data/lib/wsdl/soap/encodedMappingRegistryCreator.rb +74 -0
  85. data/lib/wsdl/soap/fault.rb +57 -0
  86. data/lib/wsdl/soap/header.rb +87 -0
  87. data/lib/wsdl/soap/headerfault.rb +57 -0
  88. data/lib/wsdl/soap/literalMappingRegistryCreator.rb +116 -0
  89. data/lib/wsdl/soap/mappingRegistryCreator.rb +59 -0
  90. data/lib/wsdl/soap/mappingRegistryCreatorSupport.rb +377 -0
  91. data/lib/wsdl/soap/methodDefCreator.rb +200 -0
  92. data/lib/wsdl/soap/operation.rb +113 -0
  93. data/lib/wsdl/soap/servantSkeltonCreator.rb +92 -0
  94. data/lib/wsdl/soap/servletStubCreator.rb +105 -0
  95. data/lib/wsdl/soap/standaloneServerStubCreator.rb +101 -0
  96. data/lib/wsdl/soap/wsdl2ruby.rb +226 -0
  97. data/lib/wsdl/types.rb +45 -0
  98. data/lib/wsdl/wsdl.rb +25 -0
  99. data/lib/wsdl/xmlSchema/all.rb +25 -0
  100. data/lib/wsdl/xmlSchema/annotation.rb +35 -0
  101. data/lib/wsdl/xmlSchema/any.rb +62 -0
  102. data/lib/wsdl/xmlSchema/anyAttribute.rb +49 -0
  103. data/lib/wsdl/xmlSchema/attribute.rb +105 -0
  104. data/lib/wsdl/xmlSchema/attributeGroup.rb +69 -0
  105. data/lib/wsdl/xmlSchema/choice.rb +59 -0
  106. data/lib/wsdl/xmlSchema/complexContent.rb +98 -0
  107. data/lib/wsdl/xmlSchema/complexExtension.rb +120 -0
  108. data/lib/wsdl/xmlSchema/complexRestriction.rb +105 -0
  109. data/lib/wsdl/xmlSchema/complexType.rb +194 -0
  110. data/lib/wsdl/xmlSchema/content.rb +96 -0
  111. data/lib/wsdl/xmlSchema/data.rb +117 -0
  112. data/lib/wsdl/xmlSchema/element.rb +154 -0
  113. data/lib/wsdl/xmlSchema/enumeration.rb +37 -0
  114. data/lib/wsdl/xmlSchema/fractiondigits.rb +38 -0
  115. data/lib/wsdl/xmlSchema/group.rb +101 -0
  116. data/lib/wsdl/xmlSchema/import.rb +54 -0
  117. data/lib/wsdl/xmlSchema/importHandler.rb +46 -0
  118. data/lib/wsdl/xmlSchema/importer.rb +103 -0
  119. data/lib/wsdl/xmlSchema/include.rb +49 -0
  120. data/lib/wsdl/xmlSchema/length.rb +38 -0
  121. data/lib/wsdl/xmlSchema/list.rb +49 -0
  122. data/lib/wsdl/xmlSchema/maxexclusive.rb +38 -0
  123. data/lib/wsdl/xmlSchema/maxinclusive.rb +38 -0
  124. data/lib/wsdl/xmlSchema/maxlength.rb +38 -0
  125. data/lib/wsdl/xmlSchema/minexclusive.rb +38 -0
  126. data/lib/wsdl/xmlSchema/mininclusive.rb +38 -0
  127. data/lib/wsdl/xmlSchema/minlength.rb +38 -0
  128. data/lib/wsdl/xmlSchema/parser.rb +168 -0
  129. data/lib/wsdl/xmlSchema/pattern.rb +37 -0
  130. data/lib/wsdl/xmlSchema/ref.rb +34 -0
  131. data/lib/wsdl/xmlSchema/schema.rb +179 -0
  132. data/lib/wsdl/xmlSchema/sequence.rb +55 -0
  133. data/lib/wsdl/xmlSchema/simpleContent.rb +70 -0
  134. data/lib/wsdl/xmlSchema/simpleExtension.rb +63 -0
  135. data/lib/wsdl/xmlSchema/simpleRestriction.rb +133 -0
  136. data/lib/wsdl/xmlSchema/simpleType.rb +88 -0
  137. data/lib/wsdl/xmlSchema/totaldigits.rb +38 -0
  138. data/lib/wsdl/xmlSchema/union.rb +36 -0
  139. data/lib/wsdl/xmlSchema/unique.rb +35 -0
  140. data/lib/wsdl/xmlSchema/whitespace.rb +38 -0
  141. data/lib/wsdl/xmlSchema/xsd2ruby.rb +176 -0
  142. data/lib/xsd/charset.rb +190 -0
  143. data/lib/xsd/codegen.rb +13 -0
  144. data/lib/xsd/codegen/classdef.rb +209 -0
  145. data/lib/xsd/codegen/commentdef.rb +35 -0
  146. data/lib/xsd/codegen/gensupport.rb +277 -0
  147. data/lib/xsd/codegen/methoddef.rb +71 -0
  148. data/lib/xsd/codegen/moduledef.rb +209 -0
  149. data/lib/xsd/datatypes.rb +1466 -0
  150. data/lib/xsd/datatypes1999.rb +21 -0
  151. data/lib/xsd/iconvcharset.rb +34 -0
  152. data/lib/xsd/mapping.rb +69 -0
  153. data/lib/xsd/namedelements.rb +133 -0
  154. data/lib/xsd/ns.rb +183 -0
  155. data/lib/xsd/qname.rb +80 -0
  156. data/lib/xsd/xmlparser.rb +77 -0
  157. data/lib/xsd/xmlparser/libxmlparser.rb +116 -0
  158. data/lib/xsd/xmlparser/parser.rb +101 -0
  159. data/lib/xsd/xmlparser/rexmlparser.rb +59 -0
  160. data/lib/xsd/xmlparser/xmlparser.rb +51 -0
  161. data/lib/xsd/xmlparser/xmlscanner.rb +150 -0
  162. data/test/16runner.rb +69 -0
  163. data/test/helper.rb +7 -0
  164. data/test/interopR2/README.txt +2 -0
  165. data/test/interopR2/SOAPBuildersInterop_R2.wsdl +461 -0
  166. data/test/interopR2/SOAPBuildersInterop_R2GrB.wsdl +19 -0
  167. data/test/interopR2/base.rb +289 -0
  168. data/test/interopR2/client.NetRemoting.rb +18 -0
  169. data/test/interopR2/client.rb +1235 -0
  170. data/test/interopR2/client4S4C.rb +16 -0
  171. data/test/interopR2/client4S4C2.rb +15 -0
  172. data/test/interopR2/clientASP.NET.rb +18 -0
  173. data/test/interopR2/clientApacheAxis.rb +17 -0
  174. data/test/interopR2/clientApacheSOAP.rb +18 -0
  175. data/test/interopR2/clientBEAWebLogic.rb +18 -0
  176. data/test/interopR2/clientBase.rb +1968 -0
  177. data/test/interopR2/clientCapeConnect.rb +19 -0
  178. data/test/interopR2/clientDelphi.rb +20 -0
  179. data/test/interopR2/clientEasySoap.rb +15 -0
  180. data/test/interopR2/clientFrontier.rb +26 -0
  181. data/test/interopR2/clientGLUE.rb +33 -0
  182. data/test/interopR2/clientHP.rb +14 -0
  183. data/test/interopR2/clientJAX-RPC.rb +20 -0
  184. data/test/interopR2/clientJSOAP.rb +15 -0
  185. data/test/interopR2/clientKafkaXSLT.rb +16 -0
  186. data/test/interopR2/clientMSSOAPToolkit2.0.rb +18 -0
  187. data/test/interopR2/clientMSSOAPToolkit3.0.rb +18 -0
  188. data/test/interopR2/clientNuSOAP.rb +20 -0
  189. data/test/interopR2/clientNuWave.rb +16 -0
  190. data/test/interopR2/clientOpenLink.rb +16 -0
  191. data/test/interopR2/clientOracle.rb +16 -0
  192. data/test/interopR2/clientPEAR.rb +19 -0
  193. data/test/interopR2/clientPhalanx.rb +19 -0
  194. data/test/interopR2/clientSIMACE.rb +19 -0
  195. data/test/interopR2/clientSOAP4R.rb +19 -0
  196. data/test/interopR2/clientSOAP__Lite.rb +15 -0
  197. data/test/interopR2/clientSQLData.rb +19 -0
  198. data/test/interopR2/clientSilverStream.rb +18 -0
  199. data/test/interopR2/clientSpray2001.rb +18 -0
  200. data/test/interopR2/clientSun.rb +20 -0
  201. data/test/interopR2/clientVWOpentalkSoap.rb +20 -0
  202. data/test/interopR2/clientWASP.rb +20 -0
  203. data/test/interopR2/clientWASPC.rb +19 -0
  204. data/test/interopR2/clientWebMethods.rb +16 -0
  205. data/test/interopR2/clientWhiteMesa.rb +29 -0
  206. data/test/interopR2/clientWingfoot.rb +16 -0
  207. data/test/interopR2/clientXMLBus.rb +20 -0
  208. data/test/interopR2/clientXMLRPC-EPI.rb +18 -0
  209. data/test/interopR2/clientXSOAP.rb +15 -0
  210. data/test/interopR2/clientZSI.rb +20 -0
  211. data/test/interopR2/clienteSOAP.rb +19 -0
  212. data/test/interopR2/clientgSOAP.rb +19 -0
  213. data/test/interopR2/clientkSOAP.rb +18 -0
  214. data/test/interopR2/iSimonReg.rb +113 -0
  215. data/test/interopR2/interopResultBase.rb +115 -0
  216. data/test/interopR2/interopService.rb +248 -0
  217. data/test/interopR2/rwikiInteropService.rb +106 -0
  218. data/test/interopR2/server.cgi +271 -0
  219. data/test/interopR2/server.rb +276 -0
  220. data/test/interopR2/simonReg.rb +124 -0
  221. data/test/interopR2/test.sh +49 -0
  222. data/test/interopR4/client.rb +113 -0
  223. data/test/runner.rb +8 -0
  224. data/test/sm11/classDef.rb +157 -0
  225. data/test/sm11/client.rb +543 -0
  226. data/test/sm11/driver.rb +184 -0
  227. data/test/sm11/servant.rb +1068 -0
  228. data/test/sm11/server.rb +26 -0
  229. data/test/soap/asp.net/hello.wsdl +96 -0
  230. data/test/soap/asp.net/test_aspdotnet.rb +124 -0
  231. data/test/soap/auth/htdigest +2 -0
  232. data/test/soap/auth/htpasswd +2 -0
  233. data/test/soap/auth/test_basic.rb +118 -0
  234. data/test/soap/auth/test_digest.rb +119 -0
  235. data/test/soap/calc/calc.rb +18 -0
  236. data/test/soap/calc/calc2.rb +30 -0
  237. data/test/soap/calc/server.cgi +16 -0
  238. data/test/soap/calc/server.rb +18 -0
  239. data/test/soap/calc/server2.rb +21 -0
  240. data/test/soap/calc/test_calc.rb +53 -0
  241. data/test/soap/calc/test_calc2.rb +57 -0
  242. data/test/soap/calc/test_calc_cgi.rb +72 -0
  243. data/test/soap/case/test_mapping.rb +58 -0
  244. data/test/soap/fault/test_customfault.rb +61 -0
  245. data/test/soap/fault/test_fault.rb +47 -0
  246. data/test/soap/fault/test_soaparray.rb +36 -0
  247. data/test/soap/filter/test_filter.rb +147 -0
  248. data/test/soap/header/server.cgi +121 -0
  249. data/test/soap/header/test_authheader.rb +241 -0
  250. data/test/soap/header/test_authheader_cgi.rb +122 -0
  251. data/test/soap/header/test_simplehandler.rb +117 -0
  252. data/test/soap/helloworld/hw_s.rb +17 -0
  253. data/test/soap/helloworld/test_helloworld.rb +45 -0
  254. data/test/soap/htpasswd +2 -0
  255. data/test/soap/literalArrayMapping/amazonEc.rb +4779 -0
  256. data/test/soap/literalArrayMapping/amazonEcDriver.rb +173 -0
  257. data/test/soap/literalArrayMapping/amazonresponse.xml +100 -0
  258. data/test/soap/literalArrayMapping/test_definedarray.rb +35 -0
  259. data/test/soap/marshal/marshaltestlib.rb +498 -0
  260. data/test/soap/marshal/test_digraph.rb +57 -0
  261. data/test/soap/marshal/test_marshal.rb +28 -0
  262. data/test/soap/marshal/test_struct.rb +48 -0
  263. data/test/soap/ssl/README +1 -0
  264. data/test/soap/ssl/ca.cert +23 -0
  265. data/test/soap/ssl/client.cert +19 -0
  266. data/test/soap/ssl/client.key +15 -0
  267. data/test/soap/ssl/server.cert +19 -0
  268. data/test/soap/ssl/server.key +15 -0
  269. data/test/soap/ssl/sslsvr.rb +59 -0
  270. data/test/soap/ssl/subca.cert +21 -0
  271. data/test/soap/ssl/test_ssl.rb +236 -0
  272. data/test/soap/struct/test_struct.rb +71 -0
  273. data/test/soap/styleuse/client.rb +21 -0
  274. data/test/soap/styleuse/server.rb +87 -0
  275. data/test/soap/swa/test_file.rb +76 -0
  276. data/test/soap/test_basetype.rb +1091 -0
  277. data/test/soap/test_cookie.rb +113 -0
  278. data/test/soap/test_custom_ns.rb +106 -0
  279. data/test/soap/test_custommap.rb +111 -0
  280. data/test/soap/test_empty.rb +106 -0
  281. data/test/soap/test_envelopenamespace.rb +86 -0
  282. data/test/soap/test_extraattr.rb +55 -0
  283. data/test/soap/test_generator.rb +32 -0
  284. data/test/soap/test_httpconfigloader.rb +72 -0
  285. data/test/soap/test_mapping.rb +132 -0
  286. data/test/soap/test_nestedexception.rb +71 -0
  287. data/test/soap/test_nil.rb +71 -0
  288. data/test/soap/test_no_indent.rb +89 -0
  289. data/test/soap/test_property.rb +429 -0
  290. data/test/soap/test_response_as_xml.rb +118 -0
  291. data/test/soap/test_soapelement.rb +139 -0
  292. data/test/soap/test_streamhandler.rb +271 -0
  293. data/test/soap/test_styleuse.rb +327 -0
  294. data/test/soap/wsdlDriver/README.txt +2 -0
  295. data/test/soap/wsdlDriver/calc.wsdl +126 -0
  296. data/test/soap/wsdlDriver/document.wsdl +54 -0
  297. data/test/soap/wsdlDriver/echo_version.rb +30 -0
  298. data/test/soap/wsdlDriver/simpletype.wsdl +63 -0
  299. data/test/soap/wsdlDriver/test_calc.rb +72 -0
  300. data/test/soap/wsdlDriver/test_document.rb +72 -0
  301. data/test/soap/wsdlDriver/test_simpletype.rb +82 -0
  302. data/test/testutil.rb +55 -0
  303. data/test/wsdl/abstract/abstract.wsdl +176 -0
  304. data/test/wsdl/abstract/test_abstract.rb +160 -0
  305. data/test/wsdl/anonymous/expectedClassDef.rb +129 -0
  306. data/test/wsdl/anonymous/expectedDriver.rb +60 -0
  307. data/test/wsdl/anonymous/expectedMappingRegistry.rb +177 -0
  308. data/test/wsdl/anonymous/lp.wsdl +147 -0
  309. data/test/wsdl/anonymous/test_anonymous.rb +131 -0
  310. data/test/wsdl/any/any.wsdl +114 -0
  311. data/test/wsdl/any/expectedDriver.rb +69 -0
  312. data/test/wsdl/any/expectedEcho.rb +58 -0
  313. data/test/wsdl/any/expectedMappingRegistry.rb +64 -0
  314. data/test/wsdl/any/expectedService.rb +70 -0
  315. data/test/wsdl/any/test_any.rb +194 -0
  316. data/test/wsdl/axisArray/axisArray.wsdl +87 -0
  317. data/test/wsdl/axisArray/test_axisarray.rb +125 -0
  318. data/test/wsdl/choice/choice.wsdl +167 -0
  319. data/test/wsdl/choice/test_choice.rb +311 -0
  320. data/test/wsdl/complexcontent/complexContent.wsdl +83 -0
  321. data/test/wsdl/complexcontent/test_echo.rb +91 -0
  322. data/test/wsdl/datetime/DatetimeService.rb +45 -0
  323. data/test/wsdl/datetime/datetime.rb +0 -0
  324. data/test/wsdl/datetime/datetime.wsdl +45 -0
  325. data/test/wsdl/datetime/datetimeServant.rb +23 -0
  326. data/test/wsdl/datetime/test_datetime.rb +88 -0
  327. data/test/wsdl/document/array/double.wsdl +161 -0
  328. data/test/wsdl/document/array/test_array.rb +202 -0
  329. data/test/wsdl/document/document.wsdl +76 -0
  330. data/test/wsdl/document/number.wsdl +54 -0
  331. data/test/wsdl/document/ping_nosoapaction.wsdl +66 -0
  332. data/test/wsdl/document/test_nosoapaction.rb +103 -0
  333. data/test/wsdl/document/test_number.rb +93 -0
  334. data/test/wsdl/document/test_rpc.rb +356 -0
  335. data/test/wsdl/emptycomplextype.wsdl +31 -0
  336. data/test/wsdl/fault/fault.wsdl +79 -0
  337. data/test/wsdl/fault/multifault.wsdl +96 -0
  338. data/test/wsdl/fault/test_fault.rb +120 -0
  339. data/test/wsdl/fault/test_multifault.rb +135 -0
  340. data/test/wsdl/group/expectedClassdef.rb +59 -0
  341. data/test/wsdl/group/expectedDriver.rb +52 -0
  342. data/test/wsdl/group/expectedMappingRegistry.rb +68 -0
  343. data/test/wsdl/group/group.wsdl +88 -0
  344. data/test/wsdl/group/test_rpc.rb +146 -0
  345. data/test/wsdl/list/list.wsdl +93 -0
  346. data/test/wsdl/list/test_list.rb +125 -0
  347. data/test/wsdl/map/map.wsdl +92 -0
  348. data/test/wsdl/map/map.xml +43 -0
  349. data/test/wsdl/map/test_map.rb +100 -0
  350. data/test/wsdl/marshal/person.wsdl +21 -0
  351. data/test/wsdl/marshal/person_org.rb +24 -0
  352. data/test/wsdl/marshal/test_wsdlmarshal.rb +76 -0
  353. data/test/wsdl/multiplefault.wsdl +75 -0
  354. data/test/wsdl/oneway/oneway.wsdl +36 -0
  355. data/test/wsdl/oneway/test_oneway.rb +109 -0
  356. data/test/wsdl/overload/expectedClient.rb +38 -0
  357. data/test/wsdl/overload/expectedDriver.rb +62 -0
  358. data/test/wsdl/overload/expectedServant.rb +36 -0
  359. data/test/wsdl/overload/overload.wsdl +70 -0
  360. data/test/wsdl/overload/test_overload.rb +132 -0
  361. data/test/wsdl/qualified/lp.wsdl +47 -0
  362. data/test/wsdl/qualified/lp.xsd +26 -0
  363. data/test/wsdl/qualified/np.wsdl +51 -0
  364. data/test/wsdl/qualified/test_qualified.rb +138 -0
  365. data/test/wsdl/qualified/test_unqualified.rb +139 -0
  366. data/test/wsdl/raa/RAAService.rb +126 -0
  367. data/test/wsdl/raa/README.txt +8 -0
  368. data/test/wsdl/raa/expectedClassDef.rb +101 -0
  369. data/test/wsdl/raa/expectedDriver.rb +97 -0
  370. data/test/wsdl/raa/expectedMappingRegistry.rb +122 -0
  371. data/test/wsdl/raa/raa.wsdl +264 -0
  372. data/test/wsdl/raa/test_raa.rb +127 -0
  373. data/test/wsdl/ref/expectedDriver.rb +52 -0
  374. data/test/wsdl/ref/expectedProduct.rb +244 -0
  375. data/test/wsdl/ref/product.wsdl +147 -0
  376. data/test/wsdl/ref/test_ref.rb +269 -0
  377. data/test/wsdl/rpc/rpc.wsdl +109 -0
  378. data/test/wsdl/rpc/test-rpc-lit.wsdl +371 -0
  379. data/test/wsdl/rpc/test_rpc.rb +177 -0
  380. data/test/wsdl/rpc/test_rpc_lit.rb +471 -0
  381. data/test/wsdl/simplecontent/simplecontent.wsdl +84 -0
  382. data/test/wsdl/simplecontent/test_simplecontent.rb +103 -0
  383. data/test/wsdl/simpletype/rpc/expectedClient.rb +35 -0
  384. data/test/wsdl/simpletype/rpc/expectedDriver.rb +59 -0
  385. data/test/wsdl/simpletype/rpc/expectedEchoVersion.rb +37 -0
  386. data/test/wsdl/simpletype/rpc/expectedMappingRegistry.rb +58 -0
  387. data/test/wsdl/simpletype/rpc/expectedServant.rb +33 -0
  388. data/test/wsdl/simpletype/rpc/expectedService.rb +56 -0
  389. data/test/wsdl/simpletype/rpc/rpc.wsdl +98 -0
  390. data/test/wsdl/simpletype/rpc/test_rpc.rb +53 -0
  391. data/test/wsdl/simpletype/simpletype.wsdl +114 -0
  392. data/test/wsdl/simpletype/test_simpletype.rb +93 -0
  393. data/test/wsdl/soap/soapbodyparts.wsdl +103 -0
  394. data/test/wsdl/soap/test_soapbodyparts.rb +80 -0
  395. data/test/wsdl/soap/wsdl2ruby/expectedClassdef.rb +22 -0
  396. data/test/wsdl/soap/wsdl2ruby/expectedClient.rb +35 -0
  397. data/test/wsdl/soap/wsdl2ruby/expectedDriver.rb +59 -0
  398. data/test/wsdl/soap/wsdl2ruby/expectedMappingRegistry.rb +37 -0
  399. data/test/wsdl/soap/wsdl2ruby/expectedServant.rb +33 -0
  400. data/test/wsdl/soap/wsdl2ruby/expectedService.cgi +49 -0
  401. data/test/wsdl/soap/wsdl2ruby/expectedService.rb +56 -0
  402. data/test/wsdl/soap/wsdl2ruby/rpc.wsdl +80 -0
  403. data/test/wsdl/soap/wsdl2ruby/section/expectedClassdef.rb +38 -0
  404. data/test/wsdl/soap/wsdl2ruby/section/section.xsd +31 -0
  405. data/test/wsdl/soap/wsdl2ruby/section/test_section.rb +54 -0
  406. data/test/wsdl/soap/wsdl2ruby/soapenc/soapenc.wsdl +64 -0
  407. data/test/wsdl/soap/wsdl2ruby/soapenc/test_soapenc.rb +84 -0
  408. data/test/wsdl/soap/wsdl2ruby/test_wsdl2ruby.rb +103 -0
  409. data/test/wsdl/soaptype/soaptype.wsdl +61 -0
  410. data/test/wsdl/soaptype/test_soaptype.rb +179 -0
  411. data/test/wsdl/test_emptycomplextype.rb +22 -0
  412. data/test/wsdl/test_fault.rb +51 -0
  413. data/test/wsdl/test_multiplefault.rb +42 -0
  414. data/test/xsd/codegen/test_classdef.rb +245 -0
  415. data/test/xsd/noencoding.xml +4 -0
  416. data/test/xsd/test_noencoding.rb +33 -0
  417. data/test/xsd/test_ns.rb +42 -0
  418. data/test/xsd/test_xmlschemaparser.rb +23 -0
  419. data/test/xsd/test_xsd.rb +1639 -0
  420. data/test/xsd/xmllang.xml +43 -0
  421. data/test/xsd/xmlschema.xml +12 -0
  422. data/test/xsd/xsd2ruby/expected_mysample.rb +66 -0
  423. data/test/xsd/xsd2ruby/expected_mysample_mapper.rb +12 -0
  424. data/test/xsd/xsd2ruby/expected_mysample_mapping_registry.rb +52 -0
  425. data/test/xsd/xsd2ruby/section.xsd +49 -0
  426. data/test/xsd/xsd2ruby/test_xsd2ruby.rb +91 -0
  427. metadata +490 -0
@@ -0,0 +1,71 @@
1
+ # encoding: ASCII-8BIT
2
+ # XSD4R - Generating method definition code
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/codegen/gensupport'
11
+ require 'xsd/codegen/commentdef'
12
+
13
+
14
+ module XSD
15
+ module CodeGen
16
+
17
+
18
+ class MethodDef
19
+ include GenSupport
20
+ include CommentDef
21
+
22
+ attr_accessor :definition
23
+
24
+ def initialize(name, *params)
25
+ klass, mname = name.split('.', 2)
26
+ if mname.nil?
27
+ mname, klass = klass, mname
28
+ end
29
+ unless safemethodname?(mname)
30
+ raise ArgumentError.new("name '#{name}' seems to be unsafe")
31
+ end
32
+ if klass and klass != 'self' and !safeconstname(klass)
33
+ raise ArgumentError.new("name '#{name}' seems to be unsafe")
34
+ end
35
+ @name = name
36
+ @params = params
37
+ @comment = nil
38
+ @definition = yield if block_given?
39
+ end
40
+
41
+ def dump
42
+ buf = ""
43
+ buf << dump_comment if @comment
44
+ buf << dump_method_def
45
+ buf << dump_definition if @definition and !@definition.empty?
46
+ buf << dump_method_def_end
47
+ buf
48
+ end
49
+
50
+ private
51
+
52
+ def dump_method_def
53
+ if @params.empty?
54
+ format("def #{@name}")
55
+ else
56
+ format("def #{@name}(#{@params.join(", ")})")
57
+ end
58
+ end
59
+
60
+ def dump_method_def_end
61
+ format("end")
62
+ end
63
+
64
+ def dump_definition
65
+ format(@definition, 2)
66
+ end
67
+ end
68
+
69
+
70
+ end
71
+ end
@@ -0,0 +1,209 @@
1
+ # encoding: ASCII-8BIT
2
+ # XSD4R - Generating module definition code
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/codegen/gensupport'
11
+ require 'xsd/codegen/methoddef'
12
+ require 'xsd/codegen/commentdef'
13
+
14
+
15
+ module XSD
16
+ module CodeGen
17
+
18
+
19
+ class ModuleDef
20
+ include GenSupport
21
+ include CommentDef
22
+
23
+ attr_reader :name
24
+ attr_reader :innermodule
25
+
26
+ def initialize(name)
27
+ @name = name
28
+ @comment = nil
29
+ @const = []
30
+ @code = []
31
+ @requirepath = []
32
+ @methoddef = []
33
+ @innermodule = []
34
+ end
35
+
36
+ def def_require(path)
37
+ @requirepath << path
38
+ end
39
+
40
+ def def_const(const, value)
41
+ unless safeconstname?(const)
42
+ raise ArgumentError.new("#{const} seems to be unsafe")
43
+ end
44
+ @const << [const, value]
45
+ end
46
+
47
+ def def_code(code)
48
+ @code << code
49
+ end
50
+
51
+ def def_method(name, *params)
52
+ add_method(MethodDef.new(name, *params) { yield if block_given? }, :public)
53
+ end
54
+ alias def_publicmethod def_method
55
+
56
+ def def_protectedmethod(name, *params)
57
+ add_method(MethodDef.new(name, *params) { yield if block_given? },
58
+ :protected)
59
+ end
60
+
61
+ def def_privatemethod(name, *params)
62
+ add_method(MethodDef.new(name, *params) { yield if block_given? }, :private)
63
+ end
64
+
65
+ def add_method(m, visibility = :public)
66
+ @methoddef << [visibility, m]
67
+ end
68
+
69
+ def dump
70
+ buf = ""
71
+ unless @requirepath.empty?
72
+ buf << dump_requirepath
73
+ end
74
+ buf << dump_emptyline unless buf.empty?
75
+ package = @name.split(/::/)[0..-2]
76
+ buf << dump_package_def(package) unless package.empty?
77
+ buf << dump_comment if @comment
78
+ buf << dump_module_def
79
+ spacer = false
80
+ unless @const.empty?
81
+ buf << dump_emptyline if spacer
82
+ spacer = true
83
+ buf << dump_const
84
+ end
85
+ unless @innermodule.empty?
86
+ buf << dump_emptyline # always add 1 empty line
87
+ spacer = true
88
+ buf << dump_innermodule
89
+ end
90
+ unless @code.empty?
91
+ buf << dump_emptyline if spacer
92
+ spacer = true
93
+ buf << dump_code
94
+ end
95
+ unless @methoddef.empty?
96
+ buf << dump_emptyline if spacer
97
+ spacer = true
98
+ buf << dump_methods
99
+ end
100
+ buf << dump_module_def_end
101
+ buf << dump_package_def_end(package) unless package.empty?
102
+ buf.gsub(/^\s+$/, '')
103
+ end
104
+
105
+ private
106
+
107
+ def dump_requirepath
108
+ format(
109
+ @requirepath.collect { |path|
110
+ %Q(require '#{path}')
111
+ }.join("\n")
112
+ )
113
+ end
114
+
115
+ def dump_const
116
+ dump_static(
117
+ @const.sort.collect { |var, value|
118
+ %Q(#{var} = #{dump_value(value)})
119
+ }.join("\n")
120
+ )
121
+ end
122
+
123
+ def dump_innermodule
124
+ dump_static(
125
+ @innermodule.collect { |moduledef|
126
+ moduledef.dump
127
+ }.join("\n")
128
+ )
129
+ end
130
+
131
+ def dump_code
132
+ dump_static(@code.join("\n"))
133
+ end
134
+
135
+ def dump_static(str)
136
+ format(str, 2)
137
+ end
138
+
139
+ def dump_methods
140
+ methods = {}
141
+ @methoddef.each do |visibility, method|
142
+ (methods[visibility] ||= []) << method
143
+ end
144
+ str = ""
145
+ [:public, :protected, :private].each do |visibility|
146
+ if methods[visibility]
147
+ str << "\n" unless str.empty?
148
+ str << visibility.to_s << "\n\n" unless visibility == :public
149
+ str << methods[visibility].collect { |m| format(m.dump, 2) }.join("\n")
150
+ end
151
+ end
152
+ str
153
+ end
154
+
155
+ def dump_value(value)
156
+ if value.respond_to?(:to_src)
157
+ value.to_src
158
+ else
159
+ value
160
+ end
161
+ end
162
+
163
+ def dump_package_def(package)
164
+ format(package.collect { |ele| "module #{ele}" }.join("; ")) + "\n\n"
165
+ end
166
+
167
+ def dump_package_def_end(package)
168
+ "\n\n" + format(package.collect { |ele| "end" }.join("; "))
169
+ end
170
+
171
+ def dump_module_def
172
+ name = @name.to_s.split(/::/)
173
+ format("module #{name.last}")
174
+ end
175
+
176
+ def dump_module_def_end
177
+ format("end")
178
+ end
179
+ end
180
+
181
+
182
+ end
183
+ end
184
+
185
+
186
+ if __FILE__ == $0
187
+ require 'xsd/codegen/moduledef'
188
+ include XSD::CodeGen
189
+ m = ModuleDef.new("Foo::Bar::HobbitName")
190
+ m.def_require("foo/bar")
191
+ m.def_require("baz")
192
+ m.comment = <<-EOD
193
+ foo
194
+ bar
195
+ baz
196
+ EOD
197
+ m.def_method("foo") do
198
+ <<-EOD
199
+ foo.bar = 1
200
+ baz.each do |ele|
201
+ ele + 1
202
+ end
203
+ EOD
204
+ end
205
+ m.def_method("baz", "qux")
206
+ #m.def_protectedmethod("aaa")
207
+ m.def_privatemethod("bbb")
208
+ puts m.dump
209
+ end
@@ -0,0 +1,1466 @@
1
+ # encoding: ASCII-8BIT
2
+ # XSD4R - XML Schema Datatype implementation.
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/qname'
11
+ require 'xsd/charset'
12
+ require 'soap/nestedexception'
13
+ require 'uri'
14
+
15
+ ###
16
+ ## XMLSchamaDatatypes general definitions.
17
+ #
18
+ module XSD
19
+
20
+
21
+ Namespace = 'http://www.w3.org/2001/XMLSchema'
22
+ InstanceNamespace = 'http://www.w3.org/2001/XMLSchema-instance'
23
+
24
+ AttrType = 'type'
25
+ NilValue = 'true'
26
+
27
+ AnyTypeLiteral = 'anyType'
28
+ AnySimpleTypeLiteral = 'anySimpleType'
29
+ NilLiteral = 'nil'
30
+ StringLiteral = 'string'
31
+ BooleanLiteral = 'boolean'
32
+ DecimalLiteral = 'decimal'
33
+ FloatLiteral = 'float'
34
+ DoubleLiteral = 'double'
35
+ DurationLiteral = 'duration'
36
+ DateTimeLiteral = 'dateTime'
37
+ TimeLiteral = 'time'
38
+ DateLiteral = 'date'
39
+ GYearMonthLiteral = 'gYearMonth'
40
+ GYearLiteral = 'gYear'
41
+ GMonthDayLiteral = 'gMonthDay'
42
+ GDayLiteral = 'gDay'
43
+ GMonthLiteral = 'gMonth'
44
+ HexBinaryLiteral = 'hexBinary'
45
+ Base64BinaryLiteral = 'base64Binary'
46
+ AnyURILiteral = 'anyURI'
47
+ QNameLiteral = 'QName'
48
+
49
+ NormalizedStringLiteral = 'normalizedString'
50
+ TokenLiteral = 'token'
51
+ LanguageLiteral = 'language'
52
+ NMTOKENLiteral = 'NMTOKEN'
53
+ NMTOKENSLiteral = 'NMTOKENS'
54
+ NameLiteral = 'Name'
55
+ NCNameLiteral = 'NCName'
56
+ IDLiteral = 'ID'
57
+ IDREFLiteral = 'IDREF'
58
+ IDREFSLiteral = 'IDREFS'
59
+ ENTITYLiteral = 'ENTITY'
60
+ ENTITIESLiteral = 'ENTITIES'
61
+ IntegerLiteral = 'integer'
62
+ NonPositiveIntegerLiteral = 'nonPositiveInteger'
63
+ NegativeIntegerLiteral = 'negativeInteger'
64
+ LongLiteral = 'long'
65
+ IntLiteral = 'int'
66
+ ShortLiteral = 'short'
67
+ ByteLiteral = 'byte'
68
+ NonNegativeIntegerLiteral = 'nonNegativeInteger'
69
+ UnsignedLongLiteral = 'unsignedLong'
70
+ UnsignedIntLiteral = 'unsignedInt'
71
+ UnsignedShortLiteral = 'unsignedShort'
72
+ UnsignedByteLiteral = 'unsignedByte'
73
+ PositiveIntegerLiteral = 'positiveInteger'
74
+
75
+ AttrTypeName = QName.new(InstanceNamespace, AttrType)
76
+ AttrNilName = QName.new(InstanceNamespace, NilLiteral)
77
+
78
+ AnyTypeName = QName.new(Namespace, AnyTypeLiteral)
79
+ AnySimpleTypeName = QName.new(Namespace, AnySimpleTypeLiteral)
80
+
81
+ class Error < StandardError; include ::SOAP::NestedException; end
82
+ class ValueSpaceError < Error; end
83
+
84
+
85
+ ###
86
+ ## The base class of all datatypes with Namespace.
87
+ #
88
+ class NSDBase
89
+ @@types = []
90
+
91
+ attr_accessor :type
92
+
93
+ def self.inherited(klass)
94
+ @@types << klass
95
+ end
96
+
97
+ def self.types
98
+ @@types
99
+ end
100
+
101
+ def initialize
102
+ end
103
+
104
+ def init(type)
105
+ @type = type
106
+ end
107
+ end
108
+
109
+
110
+ ###
111
+ ## The base class of XSD datatypes.
112
+ #
113
+ class XSDAnySimpleType < NSDBase
114
+ include XSD
115
+ Type = QName.new(Namespace, AnySimpleTypeLiteral)
116
+
117
+ # @data represents canonical space (ex. Integer: 123).
118
+ attr_reader :data
119
+ # @is_nil represents this data is nil or not.
120
+ attr_accessor :is_nil
121
+
122
+ def initialize(value = nil)
123
+ init(Type, value)
124
+ end
125
+
126
+ # true or raise
127
+ def check_lexical_format(value)
128
+ screen_data(value)
129
+ true
130
+ end
131
+
132
+ # set accepts a string which follows lexical space (ex. String: "+123"), or
133
+ # an object which follows canonical space (ex. Integer: 123).
134
+ def set(value)
135
+ if value.nil?
136
+ @is_nil = true
137
+ @data = nil
138
+ _set(nil)
139
+ else
140
+ @is_nil = false
141
+ _set(screen_data(value))
142
+ end
143
+ end
144
+
145
+ # to_s creates a string which follows lexical space (ex. String: "123").
146
+ def to_s()
147
+ if @is_nil
148
+ ""
149
+ else
150
+ _to_s
151
+ end
152
+ end
153
+
154
+ private
155
+
156
+ def init(type, value)
157
+ super(type)
158
+ set(value)
159
+ end
160
+
161
+ # raises ValueSpaceError if check failed
162
+ def screen_data(value)
163
+ value
164
+ end
165
+
166
+ def _set(value)
167
+ @data = value
168
+ end
169
+
170
+ def _to_s
171
+ @data.to_s
172
+ end
173
+ end
174
+
175
+ class XSDNil < XSDAnySimpleType
176
+ Type = QName.new(Namespace, NilLiteral)
177
+ Value = 'true'
178
+
179
+ def initialize(value = nil)
180
+ init(Type, value)
181
+ end
182
+ end
183
+
184
+
185
+ ###
186
+ ## Primitive datatypes.
187
+ #
188
+ class XSDString < XSDAnySimpleType
189
+ Type = QName.new(Namespace, StringLiteral)
190
+
191
+ def initialize(value = nil)
192
+ init(Type, value)
193
+ end
194
+
195
+ @@strict_ces_validation = false
196
+
197
+ def self.strict_ces_validation=(strict_ces_validation)
198
+ @@strict_ces_validation = strict_ces_validation
199
+ end
200
+
201
+ def self.strict_ces_validation
202
+ @@strict_ces_validation
203
+ end
204
+
205
+ private
206
+
207
+ def screen_data(value)
208
+ if ::XSD::XSDString.strict_ces_validation
209
+ externalces = XSD::Charset.encoding
210
+ unless XSD::Charset.is_ces(value, externalces)
211
+ raise ValueSpaceError.new("#{ type }: cannot accept '#{ value }'.")
212
+ end
213
+ end
214
+ value
215
+ end
216
+ end
217
+
218
+ class XSDBoolean < XSDAnySimpleType
219
+ Type = QName.new(Namespace, BooleanLiteral)
220
+
221
+ def initialize(value = nil)
222
+ init(Type, value)
223
+ end
224
+
225
+ private
226
+
227
+ def screen_data(value)
228
+ if value.is_a?(String)
229
+ str = value.strip
230
+ if str == 'true' || str == '1'
231
+ true
232
+ elsif str == 'false' || str == '0'
233
+ false
234
+ else
235
+ raise ValueSpaceError.new("#{ type }: cannot accept '#{ str }'.")
236
+ end
237
+ else
238
+ value ? true : false
239
+ end
240
+ end
241
+ end
242
+
243
+ class XSDDecimal < XSDAnySimpleType
244
+ Type = QName.new(Namespace, DecimalLiteral)
245
+
246
+ def initialize(value = nil)
247
+ init(Type, value)
248
+ end
249
+
250
+ def nonzero?
251
+ (@number != '0')
252
+ end
253
+
254
+ private
255
+
256
+ def screen_data(d)
257
+ if d.is_a?(String)
258
+ # Integer("00012") => 10 in Ruby.
259
+ d.sub!(/^([+\-]?)0*(?=\d)/, "\\1")
260
+ end
261
+ screen_data_str(d)
262
+ end
263
+
264
+ def screen_data_str(str)
265
+ /^([+\-]?)(\d*)(?:\.(\d*)?)?$/ =~ str.to_s.strip
266
+ unless Regexp.last_match
267
+ raise ValueSpaceError.new("#{ type }: cannot accept '#{ str }'.")
268
+ end
269
+ sign = $1 || '+'
270
+ int_part = $2
271
+ frac_part = $3
272
+ int_part = '0' if int_part.empty?
273
+ frac_part = frac_part ? frac_part.sub(/0+$/, '') : ''
274
+ point = - frac_part.size
275
+ number = int_part + frac_part
276
+ # normalize
277
+ if sign == '+'
278
+ sign = ''
279
+ elsif sign == '-'
280
+ if number == '0'
281
+ sign = ''
282
+ end
283
+ end
284
+ [sign, point, number]
285
+ end
286
+
287
+ def _set(data)
288
+ if data.nil?
289
+ @sign = @point = @number = @data = nil
290
+ return
291
+ end
292
+ @sign, @point, @number = data
293
+ @data = _to_s
294
+ @data.freeze
295
+ end
296
+
297
+ # 0.0 -> 0; right?
298
+ def _to_s
299
+ str = @number.dup
300
+ if @point.nonzero?
301
+ str[@number.size + @point, 0] = '.'
302
+ end
303
+ @sign + str
304
+ end
305
+ end
306
+
307
+ module FloatConstants
308
+ NaN = 0.0/0.0
309
+ POSITIVE_INF = +1.0/0.0
310
+ NEGATIVE_INF = -1.0/0.0
311
+ POSITIVE_ZERO = +1.0/POSITIVE_INF
312
+ NEGATIVE_ZERO = -1.0/POSITIVE_INF
313
+ MIN_POSITIVE_SINGLE = 2.0 ** -149
314
+ end
315
+
316
+ class XSDFloat < XSDAnySimpleType
317
+ include FloatConstants
318
+ Type = QName.new(Namespace, FloatLiteral)
319
+
320
+ def initialize(value = nil)
321
+ init(Type, value)
322
+ end
323
+
324
+ private
325
+
326
+ def screen_data(value)
327
+ # "NaN".to_f => 0 in some environment. libc?
328
+ if value.is_a?(Float)
329
+ return narrow32bit(value)
330
+ end
331
+ str = value.to_s.strip
332
+ if str == 'NaN'
333
+ NaN
334
+ elsif str == 'INF'
335
+ POSITIVE_INF
336
+ elsif str == '-INF'
337
+ NEGATIVE_INF
338
+ else
339
+ if /^[+\-\.\deE]+$/ !~ str
340
+ raise ValueSpaceError.new("#{ type }: cannot accept '#{ str }'.")
341
+ end
342
+ # Float("-1.4E") might fail on some system.
343
+ str << '0' if /e$/i =~ str
344
+ begin
345
+ return narrow32bit(Float(str))
346
+ rescue ArgumentError
347
+ raise ValueSpaceError.new("#{ type }: cannot accept '#{ str }'.", $!)
348
+ end
349
+ end
350
+ end
351
+
352
+ def _to_s
353
+ if @data.nan?
354
+ 'NaN'
355
+ elsif @data.infinite? == 1
356
+ 'INF'
357
+ elsif @data.infinite? == -1
358
+ '-INF'
359
+ else
360
+ sign = XSDFloat.positive?(@data) ? '+' : '-'
361
+ sign + sprintf("%.10g", @data.abs).sub(/[eE]([+-])?0+/) { 'e' + $1 }
362
+ end
363
+ end
364
+
365
+ # Convert to single-precision 32-bit floating point value.
366
+ def narrow32bit(f)
367
+ if f.nan? || f.infinite?
368
+ f
369
+ elsif f.abs < MIN_POSITIVE_SINGLE
370
+ XSDFloat.positive?(f) ? POSITIVE_ZERO : NEGATIVE_ZERO
371
+ else
372
+ f
373
+ end
374
+ end
375
+
376
+ def self.positive?(value)
377
+ (1 / value) > 0.0
378
+ end
379
+ end
380
+
381
+ # Ruby's Float is double-precision 64-bit floating point value.
382
+ class XSDDouble < XSDAnySimpleType
383
+ include FloatConstants
384
+ Type = QName.new(Namespace, DoubleLiteral)
385
+
386
+ def initialize(value = nil)
387
+ init(Type, value)
388
+ end
389
+
390
+ private
391
+
392
+ def screen_data(value)
393
+ # "NaN".to_f => 0 in some environment. libc?
394
+ if value.is_a?(Float)
395
+ return value
396
+ end
397
+ str = value.to_s.strip
398
+ if str == 'NaN'
399
+ NaN
400
+ elsif str == 'INF'
401
+ POSITIVE_INF
402
+ elsif str == '-INF'
403
+ NEGATIVE_INF
404
+ else
405
+ begin
406
+ return Float(str)
407
+ rescue ArgumentError
408
+ # '1.4e' cannot be parsed on some architecture.
409
+ if /e\z/i =~ str
410
+ begin
411
+ return Float(str + '0')
412
+ rescue ArgumentError
413
+ raise ValueSpaceError.new("#{ type }: cannot accept '#{ str }'.", $!)
414
+ end
415
+ else
416
+ raise ValueSpaceError.new("#{ type }: cannot accept '#{ str }'.", $!)
417
+ end
418
+ end
419
+ end
420
+ end
421
+
422
+ def _to_s
423
+ if @data.nan?
424
+ 'NaN'
425
+ elsif @data.infinite? == 1
426
+ 'INF'
427
+ elsif @data.infinite? == -1
428
+ '-INF'
429
+ else
430
+ sign = (1 / @data > 0.0) ? '+' : '-'
431
+ sign + sprintf("%.16g", @data.abs).sub(/[eE]([+-])?0+/) { 'e' + $1 }
432
+ end
433
+ end
434
+ end
435
+
436
+ class XSDDuration < XSDAnySimpleType
437
+ Type = QName.new(Namespace, DurationLiteral)
438
+
439
+ attr_accessor :sign
440
+ attr_accessor :year
441
+ attr_accessor :month
442
+ attr_accessor :day
443
+ attr_accessor :hour
444
+ attr_accessor :min
445
+ attr_accessor :sec
446
+
447
+ def initialize(value = nil)
448
+ init(Type, value)
449
+ end
450
+
451
+ private
452
+
453
+ def screen_data(value)
454
+ /^([+\-]?)P(?:(\d+)Y)?(?:(\d+)M)?(?:(\d+)D)?(T(?:(\d+)H)?(?:(\d+)M)?(?:(\d+(?:\.\d+)?)S)?)?$/ =~ value.to_s.strip
455
+ unless Regexp.last_match
456
+ raise ValueSpaceError.new("#{ type }: cannot accept '#{ value }'.")
457
+ end
458
+ if $5 and !$6 and !$7 and !$8
459
+ # allows durations lower than a day such as 'PT5S'.
460
+ raise ValueSpaceError.new("#{ type }: cannot accept '#{ value }'.")
461
+ end
462
+ sign = $1
463
+ year = $2.to_i
464
+ month = $3.to_i
465
+ day = $4.to_i
466
+ hour = $6.to_i
467
+ min = $7.to_i
468
+ sec = $8 ? XSDDecimal.new($8) : 0
469
+ [sign, year, month, day, hour, min, sec]
470
+ end
471
+
472
+ def _set(data)
473
+ if data.nil?
474
+ @sign = @year = @month = @day = @hour = @min = @sec = @data = nil
475
+ return
476
+ end
477
+ @sign, @year, @month, @day, @hour, @min, @sec = data
478
+ @data = _to_s
479
+ @data.freeze
480
+ end
481
+
482
+ def _to_s
483
+ str = ''
484
+ str << @sign if @sign
485
+ str << 'P'
486
+ l = ''
487
+ l << "#{ @year }Y" if @year.nonzero?
488
+ l << "#{ @month }M" if @month.nonzero?
489
+ l << "#{ @day }D" if @day.nonzero?
490
+ r = ''
491
+ r << "#{ @hour }H" if @hour.nonzero?
492
+ r << "#{ @min }M" if @min.nonzero?
493
+ r << "#{ @sec }S" if @sec.nonzero?
494
+ str << l
495
+ unless r.empty?
496
+ str << "T" << r
497
+ end
498
+ if l.empty? and r.empty?
499
+ str << "0D"
500
+ end
501
+ str
502
+ end
503
+ end
504
+
505
+
506
+ require 'rational'
507
+ require 'date'
508
+
509
+ module XSDDateTimeImpl
510
+ SecInMicro = 1000000 # 1 second = 1 million microseconds
511
+ DayInSec = 86400 # 24 Hours/Day * 60 Minutes/Hour * 60 Seconds/Minute
512
+ DayInMicro = (DayInSec * SecInMicro)
513
+
514
+ def to_obj(klass)
515
+ if klass == Time
516
+ to_time
517
+ elsif klass == Date
518
+ to_date
519
+ elsif klass == DateTime
520
+ to_datetime
521
+ else
522
+ nil
523
+ end
524
+ end
525
+
526
+ def to_time
527
+ begin
528
+ if @data.offset * DayInSec == Time.now.utc_offset
529
+ d = @data
530
+ usec = (RUBY_VERSION.to_f >= 1.9) ? (d.sec_fraction * SecInMicro).to_i : (d.sec_fraction * DayInMicro).round
531
+ Time.local(d.year, d.month, d.mday, d.hour, d.min, d.sec, usec)
532
+ else
533
+ d = @data.newof
534
+ usec = (RUBY_VERSION.to_f >= 1.9) ? (d.sec_fraction * SecInMicro).to_i : (d.sec_fraction * DayInMicro).round
535
+ Time.gm(d.year, d.month, d.mday, d.hour, d.min, d.sec, usec)
536
+ end
537
+ rescue ArgumentError
538
+ nil
539
+ end
540
+ end
541
+
542
+ def to_date
543
+ Date.new!(@data.class.send(:jd_to_ajd, @data.jd, 0, 0), 0, @data.start)
544
+ end
545
+
546
+ def to_datetime
547
+ data
548
+ end
549
+
550
+ def tz2of(str)
551
+ /^(?:Z|(?:([+\-])(\d\d):(\d\d))?)$/ =~ str
552
+ sign = $1
553
+ hour = $2.to_i
554
+ min = $3.to_i
555
+
556
+ of = case sign
557
+ when '+'
558
+ of = +(hour.to_r * 60 + min) / 1440 # 24 * 60
559
+ when '-'
560
+ of = -(hour.to_r * 60 + min) / 1440 # 24 * 60
561
+ else
562
+ 0
563
+ end
564
+ of
565
+ end
566
+
567
+ def of2tz(offset)
568
+ diffmin = offset * 24 * 60
569
+ if diffmin.zero?
570
+ 'Z'
571
+ else
572
+ ((diffmin < 0) ? '-' : '+') << format('%02d:%02d',
573
+ (diffmin.abs / 60.0).to_i, (diffmin.abs % 60.0).to_i)
574
+ end
575
+ end
576
+
577
+ def screen_data(t)
578
+ # convert t to a DateTime as an internal representation.
579
+ if t.respond_to?(:to_datetime) # 1.9 or later
580
+ t.to_datetime
581
+ elsif t.is_a?(DateTime)
582
+ t
583
+ elsif t.is_a?(Date)
584
+ t = screen_data_str(t)
585
+ t <<= 12 if t.year < 0
586
+ t
587
+ elsif t.is_a?(Time)
588
+ jd = DateTime.send(:civil_to_jd, t.year, t.mon, t.mday, DateTime::ITALY)
589
+ fr = DateTime.send(:time_to_day_fraction, t.hour, t.min, [t.sec, 59].min) + t.usec.to_r / DayInMicro
590
+ of = t.utc_offset.to_r / DayInSec
591
+ DateTime.new!(DateTime.send(:jd_to_ajd, jd, fr, of), of, DateTime::ITALY)
592
+ else
593
+ screen_data_str(t)
594
+ end
595
+ end
596
+
597
+ def add_tz(s)
598
+ s + of2tz(@data.offset)
599
+ end
600
+ end
601
+
602
+ class XSDDateTime < XSDAnySimpleType
603
+ include XSDDateTimeImpl
604
+ Type = QName.new(Namespace, DateTimeLiteral)
605
+
606
+ def initialize(value = nil)
607
+ init(Type, value)
608
+ end
609
+
610
+ private
611
+
612
+ def screen_data_str(t)
613
+ /^([+\-]?\d{4,})-(\d\d)-(\d\d)T(\d\d):(\d\d):(\d\d(?:\.(\d*))?)(Z|(?:[+\-]\d\d:\d\d)?)?$/ =~ t.to_s.strip
614
+ unless Regexp.last_match
615
+ raise ValueSpaceError.new("#{ type }: cannot accept '#{ t }'.")
616
+ end
617
+ if $1 == '0000'
618
+ raise ValueSpaceError.new("#{ type }: cannot accept '#{ t }'.")
619
+ end
620
+ year = $1.to_i
621
+ if year < 0
622
+ year += 1
623
+ end
624
+ mon = $2.to_i
625
+ mday = $3.to_i
626
+ hour = $4.to_i
627
+ min = $5.to_i
628
+ sec = $6.to_i
629
+ secfrac = $7
630
+ zonestr = $8
631
+ data = DateTime.civil(year, mon, mday, hour, min, sec, tz2of(zonestr))
632
+ if secfrac
633
+ diffday = secfrac.to_i.to_r / (10 ** secfrac.size) / DayInSec
634
+ data += diffday
635
+ # FYI: new! and jd_to_rjd are not necessary to use if you don't have
636
+ # exceptional reason.
637
+ end
638
+ [data, secfrac]
639
+ end
640
+
641
+ def _set(data)
642
+ if data.nil?
643
+ @data = @secfrac = nil
644
+ return
645
+ end
646
+ @data, @secfrac = data
647
+ end
648
+
649
+ def _to_s
650
+ year = (@data.year > 0) ? @data.year : @data.year - 1
651
+ s = format('%.4d-%02d-%02dT%02d:%02d:%02d', year, @data.mon, @data.mday, @data.hour, @data.min, @data.sec)
652
+ if @data.sec_fraction.nonzero?
653
+ if @secfrac
654
+ s << ".#{ @secfrac }"
655
+ elsif (RUBY_VERSION.to_f >= 1.9)
656
+ s << sprintf("%.16f",@data.sec_fraction.to_f).sub(/^0/, '').sub(/0*$/, '')
657
+ else
658
+ s << sprintf("%.16f",(@data.sec_fraction * DayInSec).to_f).sub(/^0/, '').sub(/0*$/, '')
659
+ end
660
+ end
661
+ add_tz(s)
662
+ end
663
+ end
664
+
665
+ class XSDTime < XSDAnySimpleType
666
+ include XSDDateTimeImpl
667
+ Type = QName.new(Namespace, TimeLiteral)
668
+
669
+ def initialize(value = nil)
670
+ init(Type, value)
671
+ end
672
+
673
+ private
674
+
675
+ def screen_data_str(t)
676
+ /^(\d\d):(\d\d):(\d\d(?:\.(\d*))?)(Z|(?:([+\-])(\d\d):(\d\d))?)?$/ =~ t.to_s.strip
677
+ unless Regexp.last_match
678
+ raise ValueSpaceError.new("#{ type }: cannot accept '#{ t }'.")
679
+ end
680
+ hour = $1.to_i
681
+ min = $2.to_i
682
+ sec = $3.to_i
683
+ secfrac = $4
684
+ zonestr = $5
685
+ data = DateTime.civil(1, 1, 1, hour, min, sec, tz2of(zonestr))
686
+ if secfrac
687
+ diffday = secfrac.to_i.to_r / (10 ** secfrac.size) / DayInSec
688
+ data += diffday
689
+ end
690
+ [data, secfrac]
691
+ end
692
+
693
+ def _set(data)
694
+ if data.nil?
695
+ @data = @secfrac = nil
696
+ return
697
+ end
698
+ @data, @secfrac = data
699
+ end
700
+
701
+ def _to_s
702
+ s = format('%02d:%02d:%02d', @data.hour, @data.min, @data.sec)
703
+ if @data.sec_fraction.nonzero?
704
+ if @secfrac
705
+ s << ".#{ @secfrac }"
706
+ else
707
+ s << sprintf("%.16f",
708
+ (@data.sec_fraction * DayInSec).to_f).sub(/^0/, '').sub(/0*$/, '')
709
+ end
710
+ end
711
+ add_tz(s)
712
+ end
713
+ end
714
+
715
+ class XSDDate < XSDAnySimpleType
716
+ include XSDDateTimeImpl
717
+ Type = QName.new(Namespace, DateLiteral)
718
+
719
+ def initialize(value = nil)
720
+ init(Type, value)
721
+ end
722
+
723
+ private
724
+
725
+ def screen_data_str(t)
726
+ /^([+\-]?\d{4,})-(\d\d)-(\d\d)(Z|(?:([+\-])(\d\d):(\d\d))?)?$/ =~ t.to_s.strip
727
+ unless Regexp.last_match
728
+ raise ValueSpaceError.new("#{ type }: cannot accept '#{ t }'.")
729
+ end
730
+ year = $1.to_i
731
+ if year < 0
732
+ year += 1
733
+ end
734
+ mon = $2.to_i
735
+ mday = $3.to_i
736
+ zonestr = $4
737
+ DateTime.civil(year, mon, mday, 0, 0, 0, tz2of(zonestr))
738
+ end
739
+
740
+ def _to_s
741
+ year = (@data.year > 0) ? @data.year : @data.year - 1
742
+ s = format('%.4d-%02d-%02d', year, @data.mon, @data.mday)
743
+ add_tz(s)
744
+ end
745
+ end
746
+
747
+ class XSDGYearMonth < XSDAnySimpleType
748
+ include XSDDateTimeImpl
749
+ Type = QName.new(Namespace, GYearMonthLiteral)
750
+
751
+ def initialize(value = nil)
752
+ init(Type, value)
753
+ end
754
+
755
+ private
756
+
757
+ def screen_data_str(t)
758
+ /^([+\-]?\d{4,})-(\d\d)(Z|(?:([+\-])(\d\d):(\d\d))?)?$/ =~ t.to_s.strip
759
+ unless Regexp.last_match
760
+ raise ValueSpaceError.new("#{ type }: cannot accept '#{ t }'.")
761
+ end
762
+ year = $1.to_i
763
+ if year < 0
764
+ year += 1
765
+ end
766
+ mon = $2.to_i
767
+ zonestr = $3
768
+ DateTime.civil(year, mon, 1, 0, 0, 0, tz2of(zonestr))
769
+ end
770
+
771
+ def _to_s
772
+ year = (@data.year > 0) ? @data.year : @data.year - 1
773
+ s = format('%.4d-%02d', year, @data.mon)
774
+ add_tz(s)
775
+ end
776
+ end
777
+
778
+ class XSDGYear < XSDAnySimpleType
779
+ include XSDDateTimeImpl
780
+ Type = QName.new(Namespace, GYearLiteral)
781
+
782
+ def initialize(value = nil)
783
+ init(Type, value)
784
+ end
785
+
786
+ private
787
+
788
+ def screen_data_str(t)
789
+ /^([+\-]?\d{4,})(Z|(?:([+\-])(\d\d):(\d\d))?)?$/ =~ t.to_s.strip
790
+ unless Regexp.last_match
791
+ raise ValueSpaceError.new("#{ type }: cannot accept '#{ t }'.")
792
+ end
793
+ year = $1.to_i
794
+ if year < 0
795
+ year += 1
796
+ end
797
+ zonestr = $2
798
+ DateTime.civil(year, 1, 1, 0, 0, 0, tz2of(zonestr))
799
+ end
800
+
801
+ def _to_s
802
+ year = (@data.year > 0) ? @data.year : @data.year - 1
803
+ s = format('%.4d', year)
804
+ add_tz(s)
805
+ end
806
+ end
807
+
808
+ class XSDGMonthDay < XSDAnySimpleType
809
+ include XSDDateTimeImpl
810
+ Type = QName.new(Namespace, GMonthDayLiteral)
811
+
812
+ def initialize(value = nil)
813
+ init(Type, value)
814
+ end
815
+
816
+ private
817
+
818
+ def screen_data_str(t)
819
+ /^--(\d\d)-(\d\d)(Z|(?:[+\-]\d\d:\d\d)?)?$/ =~ t.to_s.strip
820
+ unless Regexp.last_match
821
+ raise ValueSpaceError.new("#{ type }: cannot accept '#{ t }'.")
822
+ end
823
+ mon = $1.to_i
824
+ mday = $2.to_i
825
+ zonestr = $3
826
+ DateTime.civil(1, mon, mday, 0, 0, 0, tz2of(zonestr))
827
+ end
828
+
829
+ def _to_s
830
+ s = format('--%02d-%02d', @data.mon, @data.mday)
831
+ add_tz(s)
832
+ end
833
+ end
834
+
835
+ class XSDGDay < XSDAnySimpleType
836
+ include XSDDateTimeImpl
837
+ Type = QName.new(Namespace, GDayLiteral)
838
+
839
+ def initialize(value = nil)
840
+ init(Type, value)
841
+ end
842
+
843
+ private
844
+
845
+ def screen_data_str(t)
846
+ /^---(\d\d)(Z|(?:[+\-]\d\d:\d\d)?)?$/ =~ t.to_s.strip
847
+ unless Regexp.last_match
848
+ raise ValueSpaceError.new("#{ type }: cannot accept '#{ t }'.")
849
+ end
850
+ mday = $1.to_i
851
+ zonestr = $2
852
+ DateTime.civil(1, 1, mday, 0, 0, 0, tz2of(zonestr))
853
+ end
854
+
855
+ def _to_s
856
+ s = format('---%02d', @data.mday)
857
+ add_tz(s)
858
+ end
859
+ end
860
+
861
+ class XSDGMonth < XSDAnySimpleType
862
+ include XSDDateTimeImpl
863
+ Type = QName.new(Namespace, GMonthLiteral)
864
+
865
+ def initialize(value = nil)
866
+ init(Type, value)
867
+ end
868
+
869
+ private
870
+
871
+ def screen_data_str(t)
872
+ /^--(\d\d)(Z|(?:[+\-]\d\d:\d\d)?)?$/ =~ t.to_s.strip
873
+ unless Regexp.last_match
874
+ raise ValueSpaceError.new("#{ type }: cannot accept '#{ t }'.")
875
+ end
876
+ mon = $1.to_i
877
+ zonestr = $2
878
+ DateTime.civil(1, mon, 1, 0, 0, 0, tz2of(zonestr))
879
+ end
880
+
881
+ def _to_s
882
+ s = format('--%02d', @data.mon)
883
+ add_tz(s)
884
+ end
885
+ end
886
+
887
+ class XSDHexBinary < XSDAnySimpleType
888
+ Type = QName.new(Namespace, HexBinaryLiteral)
889
+
890
+ # String in Ruby could be a binary.
891
+ def initialize(value = nil)
892
+ init(Type, value)
893
+ end
894
+
895
+ def set_encoded(value)
896
+ if /^[0-9a-fA-F]*$/ !~ value
897
+ raise ValueSpaceError.new("#{ type }: cannot accept '#{ value }'.")
898
+ end
899
+ @data = String.new(value).strip
900
+ @is_nil = false
901
+ end
902
+
903
+ def string
904
+ [@data].pack("H*")
905
+ end
906
+
907
+ private
908
+
909
+ def screen_data(value)
910
+ value.unpack("H*")[0].tr('a-f', 'A-F')
911
+ end
912
+ end
913
+
914
+ class XSDBase64Binary < XSDAnySimpleType
915
+ Type = QName.new(Namespace, Base64BinaryLiteral)
916
+
917
+ # String in Ruby could be a binary.
918
+ def initialize(value = nil)
919
+ init(Type, value)
920
+ end
921
+
922
+ def set_encoded(value)
923
+ if /^[A-Za-z0-9+\/=]*$/ !~ value
924
+ raise ValueSpaceError.new("#{ type }: cannot accept '#{ value }'.")
925
+ end
926
+ @data = String.new(value).strip
927
+ @is_nil = false
928
+ end
929
+
930
+ def string
931
+ @data.unpack("m")[0]
932
+ end
933
+
934
+ private
935
+
936
+ def screen_data(value)
937
+ [value].pack("m").strip
938
+ end
939
+ end
940
+
941
+ class XSDAnyURI < XSDAnySimpleType
942
+ Type = QName.new(Namespace, AnyURILiteral)
943
+
944
+ def initialize(value = nil)
945
+ init(Type, value)
946
+ end
947
+
948
+ private
949
+
950
+ def screen_data(value)
951
+ begin
952
+ URI.parse(value.to_s.strip)
953
+ rescue URI::InvalidURIError
954
+ raise ValueSpaceError.new("#{ type }: cannot accept '#{ value }'.", $!)
955
+ end
956
+ end
957
+ end
958
+
959
+ class XSDQName < XSDAnySimpleType
960
+ Type = QName.new(Namespace, QNameLiteral)
961
+
962
+ def initialize(value = nil)
963
+ init(Type, value)
964
+ end
965
+
966
+ private
967
+
968
+ def screen_data(value)
969
+ /^(?:([^:]+):)?([^:]+)$/ =~ value.to_s.strip
970
+ unless Regexp.last_match
971
+ raise ValueSpaceError.new("#{ type }: cannot accept '#{ value }'.")
972
+ end
973
+ prefix = $1
974
+ localpart = $2
975
+ [prefix, localpart]
976
+ end
977
+
978
+ def _set(data)
979
+ if data.nil?
980
+ @prefix = @localpart = @data = nil
981
+ return
982
+ end
983
+ @prefix, @localpart = data
984
+ @data = _to_s
985
+ @data.freeze
986
+ end
987
+
988
+ def _to_s
989
+ if @prefix
990
+ "#{ @prefix }:#{ @localpart }"
991
+ else
992
+ "#{ @localpart }"
993
+ end
994
+ end
995
+ end
996
+
997
+
998
+ ###
999
+ ## Derived types
1000
+ #
1001
+ class XSDNormalizedString < XSDString
1002
+ Type = QName.new(Namespace, NormalizedStringLiteral)
1003
+
1004
+ def initialize(value = nil)
1005
+ init(Type, value)
1006
+ end
1007
+
1008
+ private
1009
+
1010
+ def screen_data(value)
1011
+ super
1012
+ if /[\t\r\n]/ =~ value
1013
+ raise ValueSpaceError.new("#{ type }: cannot accept '#{ value }'.")
1014
+ end
1015
+ value
1016
+ end
1017
+ end
1018
+
1019
+ class XSDToken < XSDNormalizedString
1020
+ Type = QName.new(Namespace, TokenLiteral)
1021
+
1022
+ def initialize(value = nil)
1023
+ init(Type, value)
1024
+ end
1025
+
1026
+ private
1027
+
1028
+ def screen_data(value)
1029
+ super
1030
+ if /\A / =~ value or / \Z/ =~ value or value.index(' ')
1031
+ raise ValueSpaceError.new("#{ type }: cannot accept '#{ value }'.")
1032
+ end
1033
+ value
1034
+ end
1035
+ end
1036
+
1037
+ class XSDLanguage < XSDToken
1038
+ Type = QName.new(Namespace, LanguageLiteral)
1039
+
1040
+ def initialize(value = nil)
1041
+ init(Type, value)
1042
+ end
1043
+
1044
+ private
1045
+
1046
+ def screen_data(value)
1047
+ super
1048
+ # RFC 3066 syntax check
1049
+ if /\A[a-zA-Z]{1,8}(-[a-zA-Z0-9]{1,8})?\z/ !~ value
1050
+ raise ValueSpaceError.new("#{ type }: cannot accept '#{ value }'.")
1051
+ end
1052
+ value
1053
+ end
1054
+ end
1055
+
1056
+ class XSDNMTOKEN < XSDToken
1057
+ Type = QName.new(Namespace, NMTOKENLiteral)
1058
+
1059
+ def initialize(value = nil)
1060
+ init(Type, value)
1061
+ end
1062
+
1063
+ private
1064
+
1065
+ def screen_data(value)
1066
+ super
1067
+ # TODO: check lexical space and convert to a value
1068
+ value
1069
+ end
1070
+ end
1071
+
1072
+ class XSDNMTOKENS < XSDNMTOKEN
1073
+ Type = QName.new(Namespace, NMTOKENSLiteral)
1074
+
1075
+ def initialize(value = nil)
1076
+ init(Type, value)
1077
+ end
1078
+
1079
+ private
1080
+
1081
+ def screen_data(value)
1082
+ # derived by list
1083
+ # TODO: check lexical space and convert to a value
1084
+ value
1085
+ end
1086
+ end
1087
+
1088
+ class XSDName < XSDToken
1089
+ Type = QName.new(Namespace, NameLiteral)
1090
+
1091
+ def initialize(value = nil)
1092
+ init(Type, value)
1093
+ end
1094
+
1095
+ private
1096
+
1097
+ def screen_data(value)
1098
+ super
1099
+ # TODO: check lexical space and convert to a value
1100
+ value
1101
+ end
1102
+ end
1103
+
1104
+ class XSDNCName < XSDName
1105
+ Type = QName.new(Namespace, NCNameLiteral)
1106
+
1107
+ def initialize(value = nil)
1108
+ init(Type, value)
1109
+ end
1110
+
1111
+ private
1112
+
1113
+ def screen_data(value)
1114
+ super
1115
+ # TODO: check lexical space and convert to a value
1116
+ value
1117
+ end
1118
+ end
1119
+
1120
+ class XSDID < XSDNCName
1121
+ Type = QName.new(Namespace, IDLiteral)
1122
+
1123
+ def initialize(value = nil)
1124
+ init(Type, value)
1125
+ end
1126
+
1127
+ private
1128
+
1129
+ def screen_data(value)
1130
+ super
1131
+ # TODO: check lexical space and convert to a value
1132
+ value
1133
+ end
1134
+ end
1135
+
1136
+ class XSDIDREF < XSDNCName
1137
+ Type = QName.new(Namespace, IDREFLiteral)
1138
+
1139
+ def initialize(value = nil)
1140
+ init(Type, value)
1141
+ end
1142
+
1143
+ private
1144
+
1145
+ def screen_data(value)
1146
+ super
1147
+ # TODO: check lexical space and convert to a value
1148
+ value
1149
+ end
1150
+ end
1151
+
1152
+ class XSDIDREFS < XSDIDREF
1153
+ Type = QName.new(Namespace, IDREFSLiteral)
1154
+
1155
+ def initialize(value = nil)
1156
+ init(Type, value)
1157
+ end
1158
+
1159
+ private
1160
+
1161
+ def screen_data(value)
1162
+ # derived by list
1163
+ # TODO: check lexical space and convert to a value
1164
+ value
1165
+ end
1166
+ end
1167
+
1168
+ class XSDENTITY < XSDNCName
1169
+ Type = QName.new(Namespace, ENTITYLiteral)
1170
+
1171
+ def initialize(value = nil)
1172
+ init(Type, value)
1173
+ end
1174
+
1175
+ private
1176
+
1177
+ def screen_data(value)
1178
+ super
1179
+ # TODO: check lexical space and convert to a value
1180
+ value
1181
+ end
1182
+ end
1183
+
1184
+ class XSDENTITIES < XSDENTITY
1185
+ Type = QName.new(Namespace, ENTITIESLiteral)
1186
+
1187
+ def initialize(value = nil)
1188
+ init(Type, value)
1189
+ end
1190
+
1191
+ private
1192
+
1193
+ def screen_data(value)
1194
+ # derived by list
1195
+ # TODO: check lexical space and convert to a value
1196
+ value
1197
+ end
1198
+ end
1199
+
1200
+ class XSDInteger < XSDDecimal
1201
+ Type = QName.new(Namespace, IntegerLiteral)
1202
+
1203
+ def initialize(value = nil)
1204
+ init(Type, value)
1205
+ end
1206
+
1207
+ private
1208
+
1209
+ def screen_data_str(str)
1210
+ begin
1211
+ data = Integer(str)
1212
+ rescue ArgumentError
1213
+ raise ValueSpaceError.new("#{ type }: cannot accept '#{ str }'.", $!)
1214
+ end
1215
+ unless validate(data)
1216
+ raise ValueSpaceError.new("#{ type }: cannot accept '#{ str }'.")
1217
+ end
1218
+ data
1219
+ end
1220
+
1221
+ def _set(value)
1222
+ @data = value
1223
+ end
1224
+
1225
+ def _to_s()
1226
+ @data.to_s
1227
+ end
1228
+
1229
+ def validate(v)
1230
+ max = maxinclusive
1231
+ min = mininclusive
1232
+ (max.nil? or v <= max) and (min.nil? or v >= min)
1233
+ end
1234
+
1235
+ def maxinclusive
1236
+ nil
1237
+ end
1238
+
1239
+ def mininclusive
1240
+ nil
1241
+ end
1242
+
1243
+ PositiveMinInclusive = 1
1244
+ def positive(v)
1245
+ PositiveMinInclusive <= v
1246
+ end
1247
+ end
1248
+
1249
+ class XSDNonPositiveInteger < XSDInteger
1250
+ Type = QName.new(Namespace, NonPositiveIntegerLiteral)
1251
+
1252
+ def initialize(value = nil)
1253
+ init(Type, value)
1254
+ end
1255
+
1256
+ private
1257
+
1258
+ def maxinclusive
1259
+ 0
1260
+ end
1261
+
1262
+ def mininclusive
1263
+ nil
1264
+ end
1265
+ end
1266
+
1267
+ class XSDNegativeInteger < XSDNonPositiveInteger
1268
+ Type = QName.new(Namespace, NegativeIntegerLiteral)
1269
+
1270
+ def initialize(value = nil)
1271
+ init(Type, value)
1272
+ end
1273
+
1274
+ private
1275
+
1276
+ def maxinclusive
1277
+ -1
1278
+ end
1279
+
1280
+ def mininclusive
1281
+ nil
1282
+ end
1283
+ end
1284
+
1285
+ class XSDLong < XSDInteger
1286
+ Type = QName.new(Namespace, LongLiteral)
1287
+
1288
+ def initialize(value = nil)
1289
+ init(Type, value)
1290
+ end
1291
+
1292
+ private
1293
+
1294
+ def maxinclusive
1295
+ +9223372036854775807
1296
+ end
1297
+
1298
+ def mininclusive
1299
+ -9223372036854775808
1300
+ end
1301
+ end
1302
+
1303
+ class XSDInt < XSDLong
1304
+ Type = QName.new(Namespace, IntLiteral)
1305
+
1306
+ def initialize(value = nil)
1307
+ init(Type, value)
1308
+ end
1309
+
1310
+ private
1311
+
1312
+ def maxinclusive
1313
+ +2147483647
1314
+ end
1315
+
1316
+ def mininclusive
1317
+ -2147483648
1318
+ end
1319
+ end
1320
+
1321
+ class XSDShort < XSDInt
1322
+ Type = QName.new(Namespace, ShortLiteral)
1323
+
1324
+ def initialize(value = nil)
1325
+ init(Type, value)
1326
+ end
1327
+
1328
+ private
1329
+
1330
+ def maxinclusive
1331
+ +32767
1332
+ end
1333
+
1334
+ def mininclusive
1335
+ -32768
1336
+ end
1337
+ end
1338
+
1339
+ class XSDByte < XSDShort
1340
+ Type = QName.new(Namespace, ByteLiteral)
1341
+
1342
+ def initialize(value = nil)
1343
+ init(Type, value)
1344
+ end
1345
+
1346
+ private
1347
+
1348
+ def maxinclusive
1349
+ +127
1350
+ end
1351
+
1352
+ def mininclusive
1353
+ -128
1354
+ end
1355
+ end
1356
+
1357
+ class XSDNonNegativeInteger < XSDInteger
1358
+ Type = QName.new(Namespace, NonNegativeIntegerLiteral)
1359
+
1360
+ def initialize(value = nil)
1361
+ init(Type, value)
1362
+ end
1363
+
1364
+ private
1365
+
1366
+ def maxinclusive
1367
+ nil
1368
+ end
1369
+
1370
+ def mininclusive
1371
+ 0
1372
+ end
1373
+ end
1374
+
1375
+ class XSDUnsignedLong < XSDNonNegativeInteger
1376
+ Type = QName.new(Namespace, UnsignedLongLiteral)
1377
+
1378
+ def initialize(value = nil)
1379
+ init(Type, value)
1380
+ end
1381
+
1382
+ private
1383
+
1384
+ def maxinclusive
1385
+ +18446744073709551615
1386
+ end
1387
+
1388
+ def mininclusive
1389
+ 0
1390
+ end
1391
+ end
1392
+
1393
+ class XSDUnsignedInt < XSDUnsignedLong
1394
+ Type = QName.new(Namespace, UnsignedIntLiteral)
1395
+
1396
+ def initialize(value = nil)
1397
+ init(Type, value)
1398
+ end
1399
+
1400
+ private
1401
+
1402
+ def maxinclusive
1403
+ +4294967295
1404
+ end
1405
+
1406
+ def mininclusive
1407
+ 0
1408
+ end
1409
+ end
1410
+
1411
+ class XSDUnsignedShort < XSDUnsignedInt
1412
+ Type = QName.new(Namespace, UnsignedShortLiteral)
1413
+
1414
+ def initialize(value = nil)
1415
+ init(Type, value)
1416
+ end
1417
+
1418
+ private
1419
+
1420
+ def maxinclusive
1421
+ +65535
1422
+ end
1423
+
1424
+ def mininclusive
1425
+ 0
1426
+ end
1427
+ end
1428
+
1429
+ class XSDUnsignedByte < XSDUnsignedShort
1430
+ Type = QName.new(Namespace, UnsignedByteLiteral)
1431
+
1432
+ def initialize(value = nil)
1433
+ init(Type, value)
1434
+ end
1435
+
1436
+ private
1437
+
1438
+ def maxinclusive
1439
+ +255
1440
+ end
1441
+
1442
+ def mininclusive
1443
+ 0
1444
+ end
1445
+ end
1446
+
1447
+ class XSDPositiveInteger < XSDNonNegativeInteger
1448
+ Type = QName.new(Namespace, PositiveIntegerLiteral)
1449
+
1450
+ def initialize(value = nil)
1451
+ init(Type, value)
1452
+ end
1453
+
1454
+ private
1455
+
1456
+ def maxinclusive
1457
+ nil
1458
+ end
1459
+
1460
+ def mininclusive
1461
+ 1
1462
+ end
1463
+ end
1464
+
1465
+
1466
+ end