summaryrefslogtreecommitdiff
path: root/lib/wsdl/xmlSchema
diff options
context:
space:
mode:
Diffstat (limited to 'lib/wsdl/xmlSchema')
-rw-r--r--lib/wsdl/xmlSchema/all.rb4
-rw-r--r--lib/wsdl/xmlSchema/attribute.rb15
-rw-r--r--lib/wsdl/xmlSchema/choice.rb4
-rw-r--r--lib/wsdl/xmlSchema/complexType.rb8
-rw-r--r--lib/wsdl/xmlSchema/element.rb36
-rw-r--r--lib/wsdl/xmlSchema/schema.rb5
-rw-r--r--lib/wsdl/xmlSchema/sequence.rb4
7 files changed, 62 insertions, 14 deletions
diff --git a/lib/wsdl/xmlSchema/all.rb b/lib/wsdl/xmlSchema/all.rb
index 1cb1ac16ea..bb9566feac 100644
--- a/lib/wsdl/xmlSchema/all.rb
+++ b/lib/wsdl/xmlSchema/all.rb
@@ -29,6 +29,10 @@ class All < Info
parent.targetnamespace
end
+ def elementformdefault
+ parent.elementformdefault
+ end
+
def <<(element)
@elements << element
end
diff --git a/lib/wsdl/xmlSchema/attribute.rb b/lib/wsdl/xmlSchema/attribute.rb
index c82bd13bde..f9048661a2 100644
--- a/lib/wsdl/xmlSchema/attribute.rb
+++ b/lib/wsdl/xmlSchema/attribute.rb
@@ -18,9 +18,8 @@ class Attribute < Info
if RUBY_VERSION > "1.7.0"
def attr_reader_ref(symbol)
name = symbol.to_s
- iv = "@#{name}"
define_method(name) {
- instance_variable_get(iv) ||
+ instance_variable_get("@#{name}") ||
(refelement ? refelement.__send__(name) : nil)
}
end
@@ -94,7 +93,11 @@ class Attribute < Info
when FormAttrName
@form = value.source
when NameAttrName
- @name = XSD::QName.new(targetnamespace, value.source)
+ if directelement?
+ @name = XSD::QName.new(targetnamespace, value.source)
+ else
+ @name = XSD::QName.new(nil, value.source)
+ end
when TypeAttrName
@type = value
when DefaultAttrName
@@ -111,6 +114,12 @@ class Attribute < Info
nil
end
end
+
+private
+
+ def directelement?
+ parent.is_a?(Schema)
+ end
end
diff --git a/lib/wsdl/xmlSchema/choice.rb b/lib/wsdl/xmlSchema/choice.rb
index 435fd48e49..f6d27fa38c 100644
--- a/lib/wsdl/xmlSchema/choice.rb
+++ b/lib/wsdl/xmlSchema/choice.rb
@@ -29,6 +29,10 @@ class Choice < Info
parent.targetnamespace
end
+ def elementformdefault
+ parent.elementformdefault
+ end
+
def <<(element)
@elements << element
end
diff --git a/lib/wsdl/xmlSchema/complexType.rb b/lib/wsdl/xmlSchema/complexType.rb
index 0d9c622c74..dc9ec954fc 100644
--- a/lib/wsdl/xmlSchema/complexType.rb
+++ b/lib/wsdl/xmlSchema/complexType.rb
@@ -37,7 +37,13 @@ class ComplexType < Info
end
def targetnamespace
- parent.is_a?(WSDL::XMLSchema::Element) ? nil : parent.targetnamespace
+ # inner elements can be qualified
+ # parent.is_a?(WSDL::XMLSchema::Element) ? nil : parent.targetnamespace
+ parent.targetnamespace
+ end
+
+ def elementformdefault
+ parent.elementformdefault
end
AnyAsElement = Element.new(XSD::QName.new(nil, 'any'), XSD::AnyTypeName)
diff --git a/lib/wsdl/xmlSchema/element.rb b/lib/wsdl/xmlSchema/element.rb
index 4a144cd522..fffb6485d0 100644
--- a/lib/wsdl/xmlSchema/element.rb
+++ b/lib/wsdl/xmlSchema/element.rb
@@ -18,9 +18,8 @@ class Element < Info
if RUBY_VERSION > "1.7.0"
def attr_reader_ref(symbol)
name = symbol.to_s
- iv = "@#{name}"
define_method(name) {
- instance_variable_get(iv) ||
+ instance_variable_get("@#{name}") ||
(refelement ? refelement.__send__(name) : nil)
}
end
@@ -37,6 +36,7 @@ class Element < Info
end
attr_writer :name # required
+ attr_writer :form
attr_writer :type
attr_writer :local_simpletype
attr_writer :local_complextype
@@ -46,6 +46,7 @@ class Element < Info
attr_writer :nillable
attr_reader_ref :name
+ attr_reader_ref :form
attr_reader_ref :type
attr_reader_ref :local_simpletype
attr_reader_ref :local_complextype
@@ -59,6 +60,7 @@ class Element < Info
def initialize(name = nil, type = nil)
super()
@name = name
+ @form = nil
@type = type
@local_simpletype = @local_complextype = nil
@constraint = nil
@@ -70,18 +72,21 @@ class Element < Info
end
def refelement
- @refelement ||= root.collect_elements[@ref]
+ @refelement ||= (@ref ? root.collect_elements[@ref] : nil)
end
def targetnamespace
parent.targetnamespace
end
- def elementform
- # ToDo: must be overwritten.
+ def elementformdefault
parent.elementformdefault
end
+ def elementform
+ self.form.nil? ? parent.elementformdefault : self.form
+ end
+
def parse_element(element)
case element
when SimpleTypeName
@@ -102,7 +107,14 @@ class Element < Info
def parse_attr(attr, value)
case attr
when NameAttrName
- @name = XSD::QName.new(targetnamespace, value.source)
+ # namespace may be nil
+ if directelement? or elementform == 'qualified'
+ @name = XSD::QName.new(targetnamespace, value.source)
+ else
+ @name = XSD::QName.new(nil, value.source)
+ end
+ when FormAttrName
+ @form = value.source
when TypeAttrName
@type = value
when RefAttrName
@@ -110,14 +122,16 @@ class Element < Info
when MaxOccursAttrName
if parent.is_a?(All)
if value.source != '1'
- raise Parser::AttrConstraintError.new("cannot parse #{value} for #{attr}")
+ raise Parser::AttrConstraintError.new(
+ "cannot parse #{value} for #{attr}")
end
end
@maxoccurs = value.source
when MinOccursAttrName
if parent.is_a?(All)
unless ['0', '1'].include?(value.source)
- raise Parser::AttrConstraintError.new("cannot parse #{value} for #{attr}")
+ raise Parser::AttrConstraintError.new(
+ "cannot parse #{value} for #{attr}")
end
end
@minoccurs = value.source
@@ -127,6 +141,12 @@ class Element < Info
nil
end
end
+
+private
+
+ def directelement?
+ parent.is_a?(Schema)
+ end
end
diff --git a/lib/wsdl/xmlSchema/schema.rb b/lib/wsdl/xmlSchema/schema.rb
index 43447f9fbf..ec97d07aa5 100644
--- a/lib/wsdl/xmlSchema/schema.rb
+++ b/lib/wsdl/xmlSchema/schema.rb
@@ -1,5 +1,5 @@
# WSDL4R - XMLSchema schema definition for WSDL.
-# Copyright (C) 2002, 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>.
+# Copyright (C) 2002, 2003-2005 NAKAMURA, Hiroshi <nahi@ruby-lang.org>.
# This program is copyrighted free software by NAKAMURA, Hiroshi. You can
# redistribute it and/or modify it under the same terms of Ruby's license;
@@ -34,7 +34,8 @@ class Schema < Info
@elements = XSD::NamedElements.new
@attributes = XSD::NamedElements.new
@imports = []
- @elementformdefault = "qualified"
+ @attributeformdefault = "unqualified"
+ @elementformdefault = "unqualified"
@importedschema = {}
@location = nil
@root = self
diff --git a/lib/wsdl/xmlSchema/sequence.rb b/lib/wsdl/xmlSchema/sequence.rb
index bffb6a009d..823fa3b7f9 100644
--- a/lib/wsdl/xmlSchema/sequence.rb
+++ b/lib/wsdl/xmlSchema/sequence.rb
@@ -29,6 +29,10 @@ class Sequence < Info
parent.targetnamespace
end
+ def elementformdefault
+ parent.elementformdefault
+ end
+
def <<(element)
@elements << element
end