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
<[EMAIL PROTECTED]> To: [EMAIL PROTECTED]
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:[EMAIL PROTECTED]
>Sent: Tuesday, September 02, 2003 8:40 AM
>To: [EMAIL PROTECTED]
>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