soybean 1.0.0
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.
- data/.document +5 -0
- data/.rspec +1 -0
- data/Gemfile +15 -0
- data/Gemfile.lock +38 -0
- data/LICENSE.txt +20 -0
- data/README.rdoc +19 -0
- data/Rakefile +44 -0
- data/VERSION +1 -0
- data/bin/soybean +22 -0
- data/bin/xsd2ruby +90 -0
- data/lib/soybean.rb +11 -0
- data/lib/soybean/actions/generate_classes.rb +33 -0
- data/soybean.gemspec +236 -0
- data/spec/soybean_spec.rb +5 -0
- data/spec/spec_helper.rb +12 -0
- data/vendor/soap4r/soap/attachment.rb +109 -0
- data/vendor/soap4r/soap/attrproxy.rb +35 -0
- data/vendor/soap4r/soap/base_data.rb +1095 -0
- data/vendor/soap4r/soap/element.rb +278 -0
- data/vendor/soap4r/soap/encodingstyle/asp_dot_net_handler.rb +208 -0
- data/vendor/soap4r/soap/encodingstyle/handler.rb +121 -0
- data/vendor/soap4r/soap/encodingstyle/literal_handler.rb +196 -0
- data/vendor/soap4r/soap/encodingstyle/soap_handler.rb +560 -0
- data/vendor/soap4r/soap/filter.rb +14 -0
- data/vendor/soap4r/soap/filter/filterchain.rb +52 -0
- data/vendor/soap4r/soap/filter/handler.rb +32 -0
- data/vendor/soap4r/soap/filter/streamhandler.rb +30 -0
- data/vendor/soap4r/soap/generator.rb +299 -0
- data/vendor/soap4r/soap/header/handler.rb +62 -0
- data/vendor/soap4r/soap/header/handlerset.rb +71 -0
- data/vendor/soap4r/soap/header/mappinghandler.rb +48 -0
- data/vendor/soap4r/soap/header/simplehandler.rb +45 -0
- data/vendor/soap4r/soap/httpconfigloader.rb +140 -0
- data/vendor/soap4r/soap/mapping.rb +13 -0
- data/vendor/soap4r/soap/mapping/encodedregistry.rb +539 -0
- data/vendor/soap4r/soap/mapping/factory.rb +389 -0
- data/vendor/soap4r/soap/mapping/literalregistry.rb +392 -0
- data/vendor/soap4r/soap/mapping/mapping.rb +577 -0
- data/vendor/soap4r/soap/mapping/registry.rb +296 -0
- data/vendor/soap4r/soap/mapping/rubytype_factory.rb +446 -0
- data/vendor/soap4r/soap/mapping/schemadefinition.rb +171 -0
- data/vendor/soap4r/soap/mapping/type_map.rb +107 -0
- data/vendor/soap4r/soap/mapping/wsdlencodedregistry.rb +212 -0
- data/vendor/soap4r/soap/mapping/wsdlliteralregistry.rb +249 -0
- data/vendor/soap4r/soap/marshal.rb +60 -0
- data/vendor/soap4r/soap/mimemessage.rb +243 -0
- data/vendor/soap4r/soap/nestedexception.rb +43 -0
- data/vendor/soap4r/soap/net_http_client.rb +242 -0
- data/vendor/soap4r/soap/ns.rb +39 -0
- data/vendor/soap4r/soap/parser.rb +253 -0
- data/vendor/soap4r/soap/processor.rb +67 -0
- data/vendor/soap4r/soap/property.rb +340 -0
- data/vendor/soap4r/soap/proxy.rb +15 -0
- data/vendor/soap4r/soap/rpc/cgistub.rb +248 -0
- data/vendor/soap4r/soap/rpc/driver.rb +222 -0
- data/vendor/soap4r/soap/rpc/element.rb +375 -0
- data/vendor/soap4r/soap/rpc/httpserver.rb +143 -0
- data/vendor/soap4r/soap/rpc/method_def.rb +69 -0
- data/vendor/soap4r/soap/rpc/proxy.rb +573 -0
- data/vendor/soap4r/soap/rpc/router.rb +663 -0
- data/vendor/soap4r/soap/rpc/rpc.rb +26 -0
- data/vendor/soap4r/soap/rpc/soaplet.rb +201 -0
- data/vendor/soap4r/soap/rpc/standalone_server.rb +44 -0
- data/vendor/soap4r/soap/soap.rb +154 -0
- data/vendor/soap4r/soap/stream_handler.rb +302 -0
- data/vendor/soap4r/soap/version.rb +9 -0
- data/vendor/soap4r/soap/wsdl_driver.rb +165 -0
- data/vendor/soap4r/wsdl/binding.rb +66 -0
- data/vendor/soap4r/wsdl/data.rb +65 -0
- data/vendor/soap4r/wsdl/definitions.rb +237 -0
- data/vendor/soap4r/wsdl/documentation.rb +33 -0
- data/vendor/soap4r/wsdl/import.rb +81 -0
- data/vendor/soap4r/wsdl/importer.rb +39 -0
- data/vendor/soap4r/wsdl/info.rb +51 -0
- data/vendor/soap4r/wsdl/message.rb +55 -0
- data/vendor/soap4r/wsdl/operation.rb +152 -0
- data/vendor/soap4r/wsdl/operation_binding.rb +241 -0
- data/vendor/soap4r/wsdl/param.rb +94 -0
- data/vendor/soap4r/wsdl/parser.rb +165 -0
- data/vendor/soap4r/wsdl/part.rb +53 -0
- data/vendor/soap4r/wsdl/port.rb +67 -0
- data/vendor/soap4r/wsdl/port_type.rb +76 -0
- data/vendor/soap4r/wsdl/service.rb +62 -0
- data/vendor/soap4r/wsdl/soap/address.rb +41 -0
- data/vendor/soap4r/wsdl/soap/binding.rb +50 -0
- data/vendor/soap4r/wsdl/soap/body.rb +59 -0
- data/vendor/soap4r/wsdl/soap/cgi_stub_creator.rb +93 -0
- data/vendor/soap4r/wsdl/soap/class_def_creator.rb +437 -0
- data/vendor/soap4r/wsdl/soap/class_def_creator_support.rb +241 -0
- data/vendor/soap4r/wsdl/soap/class_name_creator.rb +55 -0
- data/vendor/soap4r/wsdl/soap/client_skelton_creator.rb +107 -0
- data/vendor/soap4r/wsdl/soap/complex_type.rb +174 -0
- data/vendor/soap4r/wsdl/soap/data.rb +43 -0
- data/vendor/soap4r/wsdl/soap/definitions.rb +201 -0
- data/vendor/soap4r/wsdl/soap/driver_creator.rb +121 -0
- data/vendor/soap4r/wsdl/soap/element.rb +34 -0
- data/vendor/soap4r/wsdl/soap/encoded_mapping_registry_creator.rb +74 -0
- data/vendor/soap4r/wsdl/soap/fault.rb +57 -0
- data/vendor/soap4r/wsdl/soap/header.rb +87 -0
- data/vendor/soap4r/wsdl/soap/headerfault.rb +57 -0
- data/vendor/soap4r/wsdl/soap/literal_mapping_registry_creator.rb +116 -0
- data/vendor/soap4r/wsdl/soap/mapping_registry_creator.rb +59 -0
- data/vendor/soap4r/wsdl/soap/mapping_registry_creator_support.rb +377 -0
- data/vendor/soap4r/wsdl/soap/method_def_creator.rb +200 -0
- data/vendor/soap4r/wsdl/soap/operation.rb +113 -0
- data/vendor/soap4r/wsdl/soap/servant_skelton_creator.rb +92 -0
- data/vendor/soap4r/wsdl/soap/servlet_stub_creator.rb +105 -0
- data/vendor/soap4r/wsdl/soap/standalone_server_stub_creator.rb +101 -0
- data/vendor/soap4r/wsdl/soap/wsdl2ruby.rb +226 -0
- data/vendor/soap4r/wsdl/types.rb +45 -0
- data/vendor/soap4r/wsdl/wsdl.rb +25 -0
- data/vendor/soap4r/wsdl/xml_schema/all.rb +25 -0
- data/vendor/soap4r/wsdl/xml_schema/annotation.rb +35 -0
- data/vendor/soap4r/wsdl/xml_schema/any.rb +62 -0
- data/vendor/soap4r/wsdl/xml_schema/any_attribute.rb +49 -0
- data/vendor/soap4r/wsdl/xml_schema/attribute.rb +105 -0
- data/vendor/soap4r/wsdl/xml_schema/attribute_group.rb +69 -0
- data/vendor/soap4r/wsdl/xml_schema/choice.rb +59 -0
- data/vendor/soap4r/wsdl/xml_schema/complex_content.rb +98 -0
- data/vendor/soap4r/wsdl/xml_schema/complex_extension.rb +120 -0
- data/vendor/soap4r/wsdl/xml_schema/complex_restriction.rb +105 -0
- data/vendor/soap4r/wsdl/xml_schema/complex_type.rb +194 -0
- data/vendor/soap4r/wsdl/xml_schema/content.rb +96 -0
- data/vendor/soap4r/wsdl/xml_schema/data.rb +117 -0
- data/vendor/soap4r/wsdl/xml_schema/element.rb +154 -0
- data/vendor/soap4r/wsdl/xml_schema/enumeration.rb +37 -0
- data/vendor/soap4r/wsdl/xml_schema/fractiondigits.rb +38 -0
- data/vendor/soap4r/wsdl/xml_schema/group.rb +101 -0
- data/vendor/soap4r/wsdl/xml_schema/import.rb +54 -0
- data/vendor/soap4r/wsdl/xml_schema/import_handler.rb +46 -0
- data/vendor/soap4r/wsdl/xml_schema/importer.rb +103 -0
- data/vendor/soap4r/wsdl/xml_schema/include.rb +49 -0
- data/vendor/soap4r/wsdl/xml_schema/length.rb +38 -0
- data/vendor/soap4r/wsdl/xml_schema/list.rb +49 -0
- data/vendor/soap4r/wsdl/xml_schema/maxexclusive.rb +38 -0
- data/vendor/soap4r/wsdl/xml_schema/maxinclusive.rb +38 -0
- data/vendor/soap4r/wsdl/xml_schema/maxlength.rb +38 -0
- data/vendor/soap4r/wsdl/xml_schema/minexclusive.rb +38 -0
- data/vendor/soap4r/wsdl/xml_schema/mininclusive.rb +38 -0
- data/vendor/soap4r/wsdl/xml_schema/minlength.rb +38 -0
- data/vendor/soap4r/wsdl/xml_schema/parser.rb +168 -0
- data/vendor/soap4r/wsdl/xml_schema/pattern.rb +37 -0
- data/vendor/soap4r/wsdl/xml_schema/ref.rb +34 -0
- data/vendor/soap4r/wsdl/xml_schema/schema.rb +179 -0
- data/vendor/soap4r/wsdl/xml_schema/sequence.rb +55 -0
- data/vendor/soap4r/wsdl/xml_schema/simple_content.rb +70 -0
- data/vendor/soap4r/wsdl/xml_schema/simple_extension.rb +63 -0
- data/vendor/soap4r/wsdl/xml_schema/simple_restriction.rb +133 -0
- data/vendor/soap4r/wsdl/xml_schema/simple_type.rb +88 -0
- data/vendor/soap4r/wsdl/xml_schema/totaldigits.rb +38 -0
- data/vendor/soap4r/wsdl/xml_schema/union.rb +36 -0
- data/vendor/soap4r/wsdl/xml_schema/unique.rb +35 -0
- data/vendor/soap4r/wsdl/xml_schema/whitespace.rb +38 -0
- data/vendor/soap4r/wsdl/xml_schema/xsd2ruby.rb +176 -0
- data/vendor/soap4r/xsd/charset.rb +190 -0
- data/vendor/soap4r/xsd/codegen.rb +13 -0
- data/vendor/soap4r/xsd/codegen/classdef.rb +209 -0
- data/vendor/soap4r/xsd/codegen/commentdef.rb +35 -0
- data/vendor/soap4r/xsd/codegen/gensupport.rb +277 -0
- data/vendor/soap4r/xsd/codegen/methoddef.rb +71 -0
- data/vendor/soap4r/xsd/codegen/moduledef.rb +209 -0
- data/vendor/soap4r/xsd/datatypes.rb +1466 -0
- data/vendor/soap4r/xsd/datatypes1999.rb +21 -0
- data/vendor/soap4r/xsd/iconvcharset.rb +34 -0
- data/vendor/soap4r/xsd/mapping.rb +69 -0
- data/vendor/soap4r/xsd/namedelements.rb +133 -0
- data/vendor/soap4r/xsd/ns.rb +183 -0
- data/vendor/soap4r/xsd/qname.rb +80 -0
- data/vendor/soap4r/xsd/xmlparser.rb +77 -0
- data/vendor/soap4r/xsd/xmlparser/libxmlparser.rb +116 -0
- data/vendor/soap4r/xsd/xmlparser/parser.rb +101 -0
- data/vendor/soap4r/xsd/xmlparser/rexmlparser.rb +59 -0
- data/vendor/soap4r/xsd/xmlparser/xmlparser.rb +51 -0
- data/vendor/soap4r/xsd/xmlparser/xmlscanner.rb +150 -0
- metadata +316 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# encoding: ASCII-8BIT
|
|
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,34 @@
|
|
|
1
|
+
# encoding: ASCII-8BIT
|
|
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
|
+
|
|
10
|
+
require 'iconv'
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
module XSD
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
class IconvCharset
|
|
17
|
+
def self.safe_iconv(to, from, str)
|
|
18
|
+
iconv = Iconv.new(to, from)
|
|
19
|
+
out = ""
|
|
20
|
+
begin
|
|
21
|
+
out << iconv.iconv(str)
|
|
22
|
+
rescue Iconv::IllegalSequence => e
|
|
23
|
+
out << e.success
|
|
24
|
+
ch, str = e.failed.split(//, 2)
|
|
25
|
+
out << '?'
|
|
26
|
+
warn("Failed to convert #{ch}")
|
|
27
|
+
retry
|
|
28
|
+
end
|
|
29
|
+
return out
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
end
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
# encoding: ASCII-8BIT
|
|
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: ASCII-8BIT
|
|
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
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
# encoding: ASCII-8BIT
|
|
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, 'n')
|
|
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
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
# encoding: ASCII-8BIT
|
|
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
|