- From: Don Box <dbox@microsoft.com>
- Date: Thu, 28 Feb 2002 09:55:42 -0800
- To: "Jacek Kopecky" <jacek@systinet.com>, <xml-dist-app@w3.org>
The root attribute was added to deal with the ambiguity of independent
elements and headers under soap:Header elements. For example, consider
the following pseudo-Java:
FooHeader h1 = new FooHeader();
BarHeader h2 = new BarHeader();
PlainOldObject o = new PlainOldObject();
h1.poo = o;
h2.foo = h1;
SoapHeaders.Add(h1);
SoapHeaders.Add(h2);
The soap header element would look like this:
<s:Header>
<ns1:FooHeader root="1" id="x">
<poo href="#y" />
</ns1:FooHeader>
<ns2:PlainOldObject id="y" />
<ns3:BarHeader id="z" root="1">
<foo href="#x" />
</ns3:BarHeader>
</s:Header>
The "root" attribute tells us which elements are "roots" and which are
simply subordinate marshals.
DB
> -----Original Message-----
> From: Jacek Kopecky [mailto:jacek@systinet.com]
> Sent: Monday, February 18, 2002 8:56 PM
> To: xml-dist-app@w3.org
> Subject: Proposal for issue 78: RPC structs and Encoding root
attribute
>
> Hello all. 8-)
> This message is intended for the Encoding task force, but please
> feel free to comment. 8-)
> The issue 78 states that it is unclear which of the child
> element information items inside the SOAP Body is the RPC
> request/response struct, it also calls for clarification of the
> SOAP Encoding "root" attribute.
>
> For the RPC part:
> Section 4.1 - RPC and SOAP Body [1] says that "the invocation is
> viewed as a single struct [...]", which, I think, is sufficient
> because the intent is that the Encoding rules will help us
> decide which of the element information items in the Body is the
> serialization root, as it is these rules alone who can cause
> other elements to be inside the Body.
>
> The Encoding part:
> The section 3.7 - root Attribute information item [2]
> effectively says:
> True serialization rules don't have the attribute, its value
> being implied as true. Elements that are not true roots can be
> labeled as such with root="true". Elements can explicitly be
> labeled as not being serialization roots with root="false".
>
> I am confused by the second statement. It means either that
> "elements that are not true roots can be labeled as not being
> true roots with root='true'" or "elements that are not true roots
> can be labeled as true roots with root='true'".
> If it is the former, the meaning blends with that of
> root='false' and it should be that.
> If the meaning is the latter, I can't see why a serialization
> non-root should ever be labeled as a serialization root. In any
> case, as a first possible solution I offer the following
> cleanups:
>
> 1) Remove the namespace qualification of the root attribute
> information item (to go along with ref and id attribute IIs).
> 2) Rephrase the long paragraph into:
> >>The root attribute information item can be used to label
> serialization roots that are not true roots of an object graph so
> that the object graph can be deserialized. True roots of a
> serialized graph have the implied value of "true" for this
> attribute information item or they may explicitly be labeled as
> true roots with a root attribute information item with a value of
> "true". An element information item that is not a serialization
> root but may appear so SHOULD/MUST explicitly be labeled as not
> being a serialization root with a root attribute information item
> with a value of "false".<<
>
> The second sentence of the rewrite consolidates the use of
> root="true" or omission of the attribute. The last sentence
> attempts to solve the RPC problem because if the serialization
> chose to put an element into an "independent" position as a child
> of the Body, it SHOULD/MUST mark this choice. The problem is the
> words "is not a root but may appear so" because it feels just too
> vague to be good.
>
> There is an other possible solution for issue 78: we have
> already removed the requirement that multiref nodes be put
> somewhere outside. I myself cannot see a reason why any
> application would want to put the elements as "independent" -
> maybe somebody enlightens me. As long as that does not happen, I
> don't see why we encourage or even mention such practice at all
> (the sole reason for section 3.7), therefore I suggest we remove
> the section and the root attribute information item.
> If we do do so, IMHO we won't loose the only reason I can see
> for sticking multirefs out: to put some data shared between
> blocks (headers) inside a common block, which could simplify
> removal of various referrents to the shared data. For example:
>
> <env:Header>
> <ns1:removeMe role="first" encStyle="soap-enc" ref="1"/>
> <ns1:removeMe role="second" encStyle="soap-enc" ref="1"/>
> <ns2:common role="../none">
> <item encStyle="soap-enc" id="1"
> xsi:type="xsd:int">42</item>
> </ns2:common>
> </env:Header>
>
> In such an application, the removal of one of the first two
> headers need not care about removing stuff that can be linked to
> from other blocks (because the particular application says so and
> takes care of that by forcing multirefs to be in the common
> header).
> So then, IMHO when an application has a reason to stick
> multirefs out somewhere, it can make the somewhere's semantic
> deal with roots and non-roots and the explicit root attribute is
> unneeded. In RPC, for example no such sticking out is necessary
> (unless special extensions are in effect in which case the
> extensions themselves should take care of multirefs in their own
> ways like the above) so there would always be only one element in
> the Body and the RPC part is solved. 8-)
>
> If anyone gives me a good reason for keeping the root attribute,
> I'll suggest the first solution (the cleanups), until then I
> favor the removal (second solution) of enc:root.
>
> Sorry about making it this long, I just can't write otherwise...
> Best regards,
>
> Jacek Kopecky
>
> Senior Architect, Systinet (formerly Idoox)
> http://www.systinet.com/
>
> [1]
http://www.w3.org/2000/xp/Group/1/10/11/soap12-part2.html#b1b2b6b8c20
> [2]
http://www.w3.org/2000/xp/Group/1/10/11/soap12-part2.html#b1b2b6b6c28
>
>
Received on Thursday, 28 February 2002 12:57:18 UTC