Ron, the schema for this document instance:

  <foo xmlns="urn:foo">
    <bar xmlns=""></bar>
  </foo>

Would be described thus:

  <schema targetNamespace="urn:foo"
      xmlns="<schemans>" >
    <element name="foo">
       <complexType>
         <sequence>
           <element name="bar" type="string"/>
         </sequence>
        </complexType>
     </element>
   </schema>

In this definition, "bar" is defined as a local element (defined within another structure rather than defined as a direct child of the <schema> element), and therefore is by default in no namespace (It is not part of "urn:foo". If you want to make it part of the targetNamespace, then you must add elementFormDefault="qualified" to the schema definition, e.g.,

  <schema targetNamespace="urn:foo"
      xmlns="<schemans>"
      elementFormDefault="qualified">
    <element name="foo">
       <complexType>
         <sequence>
           <element name="bar" type="string"/>
         </sequence>
        </complexType>
     </element>
   </schema>

In this instance:

  <foo xmlns="urn:foo">
    <snafu xmlns="urn:snafu">
       <bar xmlns=""></bar>
    </snafu>
  </foo>

There is no ambiguity. "foo" is in "urn:foo"; "snafu" is in "urn:snafu"; and "bar" is in no namespace. In terms of validation, the schema for "foo" must indicate that "snafu" is an expected child; and the schema for "snafu" must indicate that "bar" is an expected child.

Anne

On 11/3/05, Ron Reynolds <[EMAIL PROTECTED]> wrote:
that raises a schema question, since it seems that this:

<foo xmlns="urn:foo">
  <bar xmlns=""></bar>
</foo>

only makes sense if you combine it with the schema for the namespace "urn:foo"
and you find that it's elementFormDefault="unqualified" and thus bar is still
in "urn:foo" (and not really in no namespace at all).

but, what if you had 2 schemas and this XML:

<foo xmlns="urn:foo">
  <snafu xmlns="urn:snafu">
     <bar xmlns=""></bar>
  </snafu>
</foo>

and the schema for "urn:snafu" was also elementFormDefault="unqualified" and
also defined an element <bar>?  you would have to specify the namespace on
bar to clarify, despite the schema's elementFormDefault or you would have
an ambiguity, no?  does elementFormDefault only apply when the parent of the
element is in the same namespace?

(hope this isn't too off-topic for the axis-user@ list) :)
................ron.

> Axis sets the default namespace to null because your schema defines the
> child elements as unqualified. If it didn't set the default namespace to
> null, then the message would not match the schema.
>
> If you add elementFormDefault="qualified" to your schema element, then the
> child elements will be defined as qualified.
>
> Anne
>
> On 11/3/05, [EMAIL PROTECTED] <[EMAIL PROTECTED]> wrote:
>>
>> I'm hoping that Anne Manes or someone more knowledgable will step forward
>> on this one, but I've seen similar questions come up on this list over the
>> past few months and I wonder if the behavior you're seeing is because of
>> the default "unqualified" setting that you have in your schema. See this
>> post from Anne, where she gives an example of how this might work:
>>
>> http://marc.theaimsgroup.com/?l=axis-user&m=112241677227703&w=2
>>
>> Here's another response from Anne, to a question that's the opposite of
>> yours--how to suppress the namespaces being added to every element!
>> http://marc.theaimsgroup.com/?l=axis-user&m=111823412914728&w=2
>>
>> Hope this helps--
>>
>> Meghan
>>
>> _________________________________
>> Meghan Pietila
>> Java Middleware Architect
>> Sales & Service Management Program
>> US Bank
>> Gold 4
>> (651) 205-0904
>> (651) 271-2815 cell
>> [EMAIL PROTECTED]
>>
>>
>>
>>
>> "Ron Reynolds"
>> <[EMAIL PROTECTED] To: axis-user@ws.apache.org
>> com> cc:
>> Subject: only top-level element has namespace
>> 11/02/2005 06:18
>> PM
>> Please respond to
>> axis-user
>>
>>
>>
>>
>>
>>
>> i hate to ask a duplicate question but 5 minuets digging in the list
>> archives was leading nowhere.
>> my question is, what's causing this 'xmlns=""' to be added and how do i
>> prevent it? (my service is document-literal)
>>
>> <soapenv:Body>
>> <findVialsByAttributesResponse xmlns="urn:amgen.com/freezer/data <http://amgen.com/freezer/data>
>> ">
>> <locations xmlns="">
>> <location id="1">
>> ...
>>
>> same thing's happening on the request side as well -
>>
>> <soapenv:Body xmlns:wsu="..." wsu:Id="id-21465667">
>> <findVialsByAttributesRequest xmlns="urn: amgen.com/freezer/data<http://amgen.com/freezer/data>
>> ">
>> <materialTypeName xmlns="">FooTest</materialTypeName>
>> <attributeName xmlns="">Volume</attributeName>
>> <attributeValues xmlns="">
>> <value>1</value>
>> <value>2</value>
>> ...
>>
>> is it a WSDL issue? i import the type XSD thus:
>> <wsdl:definitions targetNamespace = "urn:amgen.com/freezer< http://amgen.com/freezer>
>> "
>> xmlns:tns = "urn:amgen.com/freezer <http://amgen.com/freezer>"
>> xmlns:data = "" href="http://amgen.com/freezer/data">amgen.com/freezer/data <http://amgen.com/freezer/data>"
>> xmlns:soap = " http://schemas.xmlsoap.org/wsdl/soap/
>> "
>> xmlns:xsd = "http://www.w3.org/2001/XMLSchema"
>> xmlns:wsdl = " http://schemas.xmlsoap.org/wsdl/">
>> <wsdl:types xmlns="urn:amgen.com/freezer/data<http://amgen.com/freezer/data >
>> ">
>> <xsd:schema targetNamespace="urn:amgen.com/freezer/data<http://amgen.com/freezer/data >
>> ">
>> <xsd:import namespace="urn:amgen.com/freezer/data<http://amgen.com/freezer/data >
>> "
>> schemaLocation="freezer-data.xsd"/>
>> ...
>> <xsd:element name="findVialsByAttributesRequest"
>> type="data:TFindVialsByAttributesRequest"/>
>> <xsd:element name="findVialsByAttributesResponse"
>> type="data:TFindVialsByAttributesResponse"/>
>> </xsd:schema>
>> </wsdl:types>
>> ...
>> <wsdl:message name="FindVialsByAttributesRequest">
>> <wsdl:part name="request"
>> element="data:findVialsByAttributesRequest"/>
>> </wsdl:message>
>> <wsdl:message name="FindVialsByAttributesResponse">
>> <wsdl:part name="response"
>> element="data:findVialsByAttributesResponse"/>
>> </wsdl:message>
>> ...
>>
>> i noticed the XSD doesn't explicitly call out qualified elements:
>> <xsd:schema
>> targetNamespace="urn:amgen.com/freezer/data <http://amgen.com/freezer/data>
>> "
>> xmlns:data ="" href="http://amgen.com/freezer/data">amgen.com/freezer/data < http://amgen.com/freezer/data>"
>> xmlns:xsd = "http://www.w3.org/2001/XMLSchema">
>> <xsd:complexType name="TLocation">
>> <xsd:sequence>
>> ...
>>
>> could that be a problem? it still doesn't make sense why the SOAP message
>> would EXPLICITLY strip the namespace from
>> everything except the root element, or does it? :-/
>>
>> never giving up, ;-)
>> .................ron.
>>
>>
>>
>>
>>
>>
>>
>> ------------------------------------------------------------------------------
>> Electronic Privacy Notice. This e-mail, and any attachments, contains
>> information that is, or may be, covered by electronic communications privacy
>> laws, and is also confidential and proprietary in nature. If you are not the
>> intended recipient, please be advised that you are legally prohibited from
>> retaining, using, copying, distributing, or otherwise disclosing this
>> information in any manner. Instead, please reply to the sender that you have
>> received this communication in error, and then immediately delete it. Thank
>> you in advance for your cooperation.
>>
>> =============================================================================>
>>
>



Reply via email to