source: extensions/gsdl-video/trunk/installed/cmdline/lib/ruby/1.8/wsdl/xmlSchema/element.rb@ 18425

Last change on this file since 18425 was 18425, checked in by davidb, 15 years ago

Video extension to Greenstone

File size: 3.3 KB
Line 
1# WSDL4R - XMLSchema element definition for WSDL.
2# Copyright (C) 2002, 2003, 2005 NAKAMURA, Hiroshi <[email protected]>.
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
9require 'wsdl/info'
10
11
12module WSDL
13module XMLSchema
14
15
16class Element < Info
17 class << self
18 if RUBY_VERSION > "1.7.0"
19 def attr_reader_ref(symbol)
20 name = symbol.to_s
21 define_method(name) {
22 instance_variable_get("@#{name}") ||
23 (refelement ? refelement.__send__(name) : nil)
24 }
25 end
26 else
27 def attr_reader_ref(symbol)
28 name = symbol.to_s
29 module_eval <<-EOS
30 def #{name}
31 @#{name} || (refelement ? refelement.#{name} : nil)
32 end
33 EOS
34 end
35 end
36 end
37
38 attr_writer :name # required
39 attr_writer :form
40 attr_writer :type
41 attr_writer :local_simpletype
42 attr_writer :local_complextype
43 attr_writer :constraint
44 attr_writer :maxoccurs
45 attr_writer :minoccurs
46 attr_writer :nillable
47
48 attr_reader_ref :name
49 attr_reader_ref :form
50 attr_reader_ref :type
51 attr_reader_ref :local_simpletype
52 attr_reader_ref :local_complextype
53 attr_reader_ref :constraint
54 attr_reader_ref :maxoccurs
55 attr_reader_ref :minoccurs
56 attr_reader_ref :nillable
57
58 attr_accessor :ref
59
60 def initialize(name = nil, type = nil)
61 super()
62 @name = name
63 @form = nil
64 @type = type
65 @local_simpletype = @local_complextype = nil
66 @constraint = nil
67 @maxoccurs = '1'
68 @minoccurs = '1'
69 @nillable = nil
70 @ref = nil
71 @refelement = nil
72 end
73
74 def refelement
75 @refelement ||= (@ref ? root.collect_elements[@ref] : nil)
76 end
77
78 def targetnamespace
79 parent.targetnamespace
80 end
81
82 def elementformdefault
83 parent.elementformdefault
84 end
85
86 def elementform
87 self.form.nil? ? parent.elementformdefault : self.form
88 end
89
90 def parse_element(element)
91 case element
92 when SimpleTypeName
93 @local_simpletype = SimpleType.new
94 @local_simpletype
95 when ComplexTypeName
96 @type = nil
97 @local_complextype = ComplexType.new
98 @local_complextype
99 when UniqueName
100 @constraint = Unique.new
101 @constraint
102 else
103 nil
104 end
105 end
106
107 def parse_attr(attr, value)
108 case attr
109 when NameAttrName
110 # namespace may be nil
111 if directelement? or elementform == 'qualified'
112 @name = XSD::QName.new(targetnamespace, value.source)
113 else
114 @name = XSD::QName.new(nil, value.source)
115 end
116 when FormAttrName
117 @form = value.source
118 when TypeAttrName
119 @type = value
120 when RefAttrName
121 @ref = value
122 when MaxOccursAttrName
123 if parent.is_a?(All)
124 if value.source != '1'
125 raise Parser::AttrConstraintError.new(
126 "cannot parse #{value} for #{attr}")
127 end
128 end
129 @maxoccurs = value.source
130 when MinOccursAttrName
131 if parent.is_a?(All)
132 unless ['0', '1'].include?(value.source)
133 raise Parser::AttrConstraintError.new(
134 "cannot parse #{value} for #{attr}")
135 end
136 end
137 @minoccurs = value.source
138 when NillableAttrName
139 @nillable = (value.source == 'true')
140 else
141 nil
142 end
143 end
144
145private
146
147 def directelement?
148 parent.is_a?(Schema)
149 end
150end
151
152
153end
154end
Note: See TracBrowser for help on using the repository browser.