axis-java-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Junaid.Bha...@mro.com
Subject RE: xmlns=" " in the doc\literal SOAP message
Date Tue, 02 Sep 2003 15:48:35 GMT





Whether local elements are namespacequalified or not depends on the
elementFormDefault attribute of the schema definition.

Thus given the following definition:

<schema targetName="http://www.foo.com" elementFormDefault ="true"/>
       <element name="foo"
           <complexType>
                 <sequence>
                         <element name="bar" type="xsd:string"/>
                         <element name="baz" type="xsd:string"/>
                 </sequence>
           <complexType>
      </element>
</schema>

Axis should produce the following message, since bar and baz (local
elements) need to be namespace-qualified
and are required to be in the same namespace as the targetNS.

<foo xmlns="http://www.foo.com">
         <bar>cory</bar>
         <baz>anne</baz>
</foo>

However, if your schema defintion is defined as:

<schema targetName="http://www.foo.com" elementFormDefault ="false"/>
       <element name="foo"
           <complexType>
                 <sequence>
                         <element name="bar" type="xsd:string"/>
                         <element name="baz" type="xsd:string"/>
                 </sequence>
           <complexType>
      </element>
</schema>

then the following is a perfectly legal & valid message, since local
elements bar and baz should not be ns qualified:

<foo xmlns="http://www.foo.com">
         <bar xmlns="">cory</bar>
         <baz xmlns="">anne</baz>
</foo>

The xmlns="" basically means that bar and baz do not belong to any
namespace.

Note that the default value of elementFormDefault is true in case you omit
the declaration.

- Junaid




                                                                                         
                                             
                      Anne Thomas Manes                                                  
                                             
                      <anne@manes.net>         To:       axis-user@ws.apache.org   
                                                   
                                               cc:                                       
                                             
                      09/02/2003 10:51         Subject:  RE: xmlns=" " in the doc\literal
SOAP message                                 
                      AM                                                                 
                                             
                      Please respond to                                                  
                                             
                      axis-user                                                          
                                             
                                                                                         
                                             
                                                                                         
                                             




Cory,

Yes -- you are right -- bar and baz are local elements. What that means is
that their element names are of type NCname (non-colon name) rather than
QName (qualified name).

Although most systems will accept:

<foo xmlns="http://www.foo.com">
         <bar>cory</bar>
         <baz>anne</baz>
</foo>

it isn't accurate, because it implies that bar and baz are namespace
qualified.

The proper way to represent the document would be:

<tns:foo xmlns:tns="http://www.foo.com">
         <bar>cory</bar>
         <baz>anne</baz>
</tns:foo>

or this:

<foo xmlns="http://www.foo.com">
         <bar xmlns="">cory</bar>
         <baz xmlns="">anne</baz>
</foo>

It would be wrong to produce a document like this:

<tns:foo xmlns:tns="http://www.foo.com">
         <tns:bar>cory</bar>
         <tns:baz>anne</baz>
</tns:foo>


Also note that your schema definition was incomplete. It should look like
this:

<schema targetName="http://www.foo.com"/>
       <element name="foo"
           <complexType>
                 <sequence>
                         <element name="bar" type="xsd:string"/>
                         <element name="baz" type="xsd:string"/>
                 </sequence>
           <complexType>
      </element>
</schema>

or like this

<schema targetName="http://www.foo.com"
                xmlns:tns="http://www.foo.com"/>>
         <complexType name="foo>
                 <sequence>
                         <element name="bar" type="xsd:string"/>
                         <element name="baz" type="xsd:string"/>
                 </sequence>
         <complexType>
           <element name="foo" type="tns:foo"/>
</schema>

(there are three or four other ways to describe it -- but the point is that

you must define the element named "foo")

Anne

At 09:02 AM 9/2/2003 -0500, you wrote:
>Anne,
>
>When you say "local" elements -- do you mean local to the parent element
>as defined in the schema?  In the following example, would bar and baz be
>considered local elements?
>
><schema targetName="http://www.foo.com"/>
>         <complexType name="foo>
>                 <sequence>
>                         <element name="bar" type="xsd:string"/>
>                         <element name="baz" type="xsd:string"/>
>                 </sequence>
>         <complexType>
></schema>
>
>I would think when this was serialized to the wire you'd see something
like:
>
><foo xmlns="http://www.foo.com">
>         <bar>cory</bar>
>         <baz>anne</baz>
></foo>
>
>After all, don't bar and baz technically belong to the foo.com namespace?
>
>Thanks for any input,
>Cory WIlkerson
>
>
>-----Original Message-----
>From: Anne Thomas Manes [mailto:anne@manes.net]
>Sent: Tuesday, September 02, 2003 8:40 AM
>To: axis-user@ws.apache.org
>Subject: Re: xmlns=" " in the doc\literal SOAP message
>
>
>Dimuthu,
>
>Yes. It's okay for empty namespace definitions to go across the wire. In
>fact, it some cases it might be required.
>
>In your SOAP request, the <query> element defines a default namespace
>(xmlns="blah" as opposed to xmlns:foo="blah"), which then applies to all
>subelements of the <query> element, unless it is overridden by another
>default namespace definition. If the <description> and <ItemId> elements
>are local elements to <query>, then they should not be namespace
qualified,
>and in that case, you should specify an empty default namspace definition
>in each of these subelements to override the active default namespace.
>
>Now, if the <description> and <ItemId> are global elements, then this
>message would be in error.
>
>So whether or not this message is correct depends on the schema definition
>for the message.
>
>Anne
>
>At 02:20 AM 9/1/2003 -0700, you wrote:
> >Hi all,
> >
> >I'm trying to write a doc\literal web service and my soap message
appears
> >as below.........
> >
> ><query xmlns="urn:HistorySriLanka">
> >    <description xmlns="">Wood carving of an Elephant</description>
> >    <ItemId xmlns="">ER234</ItemId>
> ></query>
> >
> >Has anybody else has come across a situation like this? Is it ok for
empty
> >xmlns="" tags to go in the wire? Any help is greatly appreciated.
> >
> >Thank you,
> >Dimuthu
> >
> >
> >Do you Yahoo!?
> ><http://us.rd.yahoo.com/evt=10469/*http://sitebuilder.yahoo.com>Yahoo!
> >SiteBuilder - Free, easy-to-use web site design software






Mime
View raw message