Marko,
Which version of Castor did you try this on, I just tried a sample test case and toggled the elementFormDefault from qualified and unqualified and it seems to be working for me. Did you remember to recompile the class-descriptors are generating new sources? --Keith Marko Topolnik wrote: > > The issue I am reporting on has been known for a long time, at least > since Bug 1138. > > It concerns the XML Schema feature known as "element form." There is > also a related term, "attribute form," and everything said here about > the former applies to the latter as well. > > Primarily, XML Schema defines element names belonging to the specified > "target namespace." All the top-level (global) element declarations are > qualified, that is, the element names they declare are members of the > target namespace. > > For the local element declarations (those inside complex type > definitions -- both named and anonymous), there is a choice: they can be > either in the target namespace as well (qualified), or in no namespace > (unqualified). The usual method of controlling this behavior is through > the XML Schema attributes in the root element: > > <xs:schema elementFormDefault="qualified | unqualified" > attributeFormDefault="qualified | unqualified"> > > Before the Bug 1138 was addressed, there was a hack that produced the > behavior correct for the qualified local element form. The bug fix > removed the hack, so now the unqualified form is properly treated. > > Jean-Pierre Loeffel has more recently (30 Sep 2003) brought up this > issue again, but this time for the problem opposite to Bug 1138: he > needs qualified local elements. His plea seems to have been lost in > mailing-list traffic, though. > > The point is, BOTH the qualified and the unqualified local element form > should be treated properly! > > I will illustrate this on an example of a simple XML Schema definition: > > (Example schema 1) > > <xs:schema targetNamespace="http://example.com/issue" > xmlns:xs="http://www.w3.org/2001/XMLSchema" > elementFormDefault="unqualified"> > <xs:element name="issue"> > <xs:complexType> > <xs:sequence> > <xs:element name="description" type="xs:string"/> > </xs:sequence> > <xs:attribute name="id" type="xs:string" use="required"/> > </xs:complexType> > </xs:element> > </xs:schema> > > Notice the Schema attribute elementFormDefault="unqualified". It says > explicitly what would otherwise be implied, that the default element > form is unqualified. > > When we run Castor's SourceGenerator on this schema, it produces classes > with the following (correct) marshalled format: > > (Example document 1) > > <issue id="id1" xmlns="http://example.com/issue"> > <description xmlns="">Description</description> > </issue> > > The element name "issue" is qualified, belonging to the namespace > http://example.com/issue. The element name "description" is unqualified, > not belonging to any namespace. > > The above XML is exactly equivalent to the following, more clear form: > > (Example document 2) > > <ex:issue id="id1" xmlns:ex="http://example.com/issue"> > <description>Description</description> > </ex:issue> > > >From this way of writing it is easier to see what is meant by > "qualified" and "unqualified" element form. > > Now, we change the original schema to the following (the only change is > in elementFormDefault): > > (Example schema 2) > > <xs:schema targetNamespace="http://example.com/issue" > xmlns:xs="http://www.w3.org/2001/XMLSchema" > elementFormDefault="qualified"> > ... same as above ... > </xs:schema> > > We run the SourceGenerator once again, and it produces exactly the same > classes as before. So, the marshalled document is the Example document > 1. But, now the marshalled format is no longer correct because it should > have been: > > (Example document 3) > > <issue id="id1" xmlns="http://example.com/issue"> > <description>Description</description> > </issue> > > That is, the element "description" should also have been in the target > namespace. > > I myself am interested in a solution that will produce the required > behavior through the use of the mapping document. I guess the solution > involving Java code generation would involve overriding the > XMLFieldDescriptor.getNamespaceUri method appropriately. > > I propose the following additions to the format of the mapping document: > > 1. add to <bind-xml> the same faculty that exists in <map-to>, namely > the ns-uri and ns-prefix attributes. This will make it possible to > specify the qualified name to be bound to for each field separately. > > 2. add attributes to the <map-to> element: element-form-default, > attribute-form-default. > > 3. add an attribute to the <bind-xml> element: form="qualified | > unqualified". > > Implementing the item 1. alone would help the matter significantly, but > would require redundant specification of ns-uri and ns-prefix on every > field. > > The addition of 2. would make it possible to reuse the namespace defined > for the top-level element . > > The addition of 3. would allow the default behavior to be overridden > where necessary. > > Marko Topolnik, M.Sc. > University of Zagreb, Croatia > > ----------------------------------------------------------- > If you wish to unsubscribe from this mailing, send mail to > [EMAIL PROTECTED] with a subject of: > unsubscribe castor-dev ----------------------------------------------------------- If you wish to unsubscribe from this mailing, send mail to [EMAIL PROTECTED] with a subject of: unsubscribe castor-dev
