W3C home > Mailing lists > Public > xmlschema-dev@w3.org > December 2001

Re: Semantics of elementFormDefault / Form

From: Jeni Tennison <jeni@jenitennison.com>
Date: Tue, 18 Dec 2001 17:46:01 +0000
Message-ID: <1974550753.20011218174601@jenitennison.com>
To: "Slein, Judith A" <JSlein@crt.xerox.com>
CC: "'xmlschema-dev@w3.org'" <xmlschema-dev@w3.org>, "Kurian, Binil" <BKurian@crt.xerox.com>, "Sembower, Neil R" <NSembower@crt.xerox.com>, "'Graham Mann'" <gmann@adobe.com>
Hi Judith,

> I am confused about the semantics of elementFormDefault and Form. Do
> they simply determine whether instance documents are forced to make
> explicit what namespace a local element belongs to, or do they
> actually change the namespace it belongs to?

They actually change the namespace that the element belongs to. The
intention is that just like an attribute without a prefix (an
unqualified attribute) is officially in no namespace, an unqualified
element is in no namespace. Applications are expected to look at the
parent/ancestor element to work out what markup language the
unqualified element is part of.

> If I say elementFormDefault="unqualified" and declare a local
> element, does the element belong to no namespace?
> If I say elementFormDefault="qualified", does the local element now
> belong to the targetNamespace?

Yes to both, as long as you don't have a form attribute on the element
with an overriding value.

> At least one of the schema processors I use seems to have this
> interpretation. When I say:
> <schema . . . elementFormDefault="qualified">
> <element name="X" type="typeA"/>
> <complexType name="Y">
>         <sequence>
>                 <element name="X" type="typeB"/>
>         </sequence>
> </complexType>
> </schema>
> I get an error message that I have defined the same element twice
> with different types.

I think you shouldn't get that error message, unless in fact your
sequence looks like:

    <element ref="my:X" />
    <element name="X" type="my:typeB" />

In other words, the error is (should be) about using the same element
twice within a particular content model, with different types. You're
otherwise perfectly able to declare two elements with the same name
but different content models, as long as they're not both global.

> Similarly, if I say:
> <schema . . . elementFormDefault="qualified">
> <element name="X" type="typeA"/>
> <complexType name="Y">
>         <sequence>
>                 <element name="Z" type="typeB"/>
>                 <any namespace="##other"/>
>         </sequence>
> </complexType>
> </schema>
> There is no error, but if I change elementFormDefault to
> "unqualified", I get an ambiguous content model error.

I think you should only get this error if it's not predictable how
many times the Z element should occur - otherwise it's clear that the
first N elements should be Z elements and anything after these Z
elements are elements matching the wildcard.



Jeni Tennison
Received on Tuesday, 18 December 2001 13:02:57 UTC

This archive was generated by hypermail 2.4.0 : Friday, 17 January 2020 23:14:56 UTC