- From: Stan Kitsis <skits@microsoft.com>
- Date: Fri, 4 Feb 2005 14:18:15 -0800
- To: "G. Ken Holman" <gkholman@CraneSoftwrights.com>, <xmlschema-dev@w3.org>
Ken,
Sorry if I was unclear. Yes, you are correct. You have to specify the
mixed attribute for the derived type if you want it to have mixed
content.
Stan
-----Original Message-----
From: xmlschema-dev-request@w3.org [mailto:xmlschema-dev-request@w3.org]
On Behalf Of G. Ken Holman
Sent: Thursday, February 03, 2005 3:49 PM
To: xmlschema-dev@w3.org
Subject: RE: Inadvertently restricting mixed content
Thank you Dan and Stan for the responses.
At 2005-02-03 13:37 -0800, Stan Kitsis wrote:
>When you derive a new type by extension, you add new content after the
>existing content of the base class and you cannot change the existing
>content. Therefore, it is impossible to change the value of mixed
>attribute when deriving new types by extension (so you can't go from
>mixed to non-mixed or vice versa when deriving by extension).
That makes sense in prose, but it doesn't mesh with what I read in the
spec, detailed below.
>When you derive a new type by restriction, you create a content model
>which is a subset of the base type. Therefore, you cannot create a
>mixed type when deriving by restriction from non-mixed type.
Fine, but I'm doing extension. I'm trying to add optional elements to
mixed content.
>The only possible case is when deriving by restriction from a mixed
base
>type. The value of mixed attribute is not passed to the derived type.
>So you have to specify it if you want the new type to be mixed.
Yes, I see in the spec that the value of the mixed attribute is not
passed
to the derived type, noted below.
>With this in mind, your question becomes "Should I know what the base
>type is when deriving from it by restriction?" And I think the answer
>is a definite yes. Since your derived type should be a valid subset of
>the base type, you have to know what the base type is.
Again, that makes sense, but it isn't the situation in which I find
myself
because I'm trying to do extension, not restriction:
V:\samp>type mixedre1.wxs
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="foo" type="fooType"/>
<xsd:complexType name="fooType" mixed="true"/>
</xsd:schema>
V:\samp>type mixedre2.wxs
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:redefine schemaLocation="mixedre1.wxs">
<xsd:complexType name="fooType">
<xsd:complexContent>
<xsd:extension base="fooType">
<xsd:sequence>
<xsd:element name="emph" minOccurs="0">
<xsd:complexType mixed="true"/>
</xsd:element>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
</xsd:redefine>
<xsd:element name="fooEmph" type="fooType"/>
</xsd:schema>
V:\samp>type mixedre3.xml
<fooEmph>Hello <emph>great</emph> world.</fooEmph>
V:\samp>
So, in the above <fooEmph>, the intuition would be to allow emphasis
elements in mixed content, and that is consistent with when you say it
is
"impossible to change the value of mixed attribute when deriving new
types
by extension", but walking through the spec in detail doesn't come to
that
conclusion. To get my instance to validate, I am obliged to add
mixed="true" in the redefinition of the type. The base type's value for
mixed is not being used.
In 3.4.2, the section "Complex Type Definition with complex content"
applies.
I'm looking at the {content type} property.
Case 2 applies because I'm doing extension.
Case 2.1 does not apply because the content is not empty.
Case 2.2 does not apply because the base definition is not empty.
Case 2.3 applies, and it points to case 1.2.1. This is the restriction
business that you say above "The only possible case is when deriving by
restriction from a mixed base type. The value of mixed attribute is not
passed to the derived type.", but it explicitly comes into play now when
I'm trying to do extension.
Case 1.2.1.1 does not apply because the mixed attribute is not present
on
<complexContent>.
Case 1.2.1.2 does not apply because the mixed attribute is not present
on
<complexType>
Case 1.2.1.3 applies, and it forces the content to be elementOnly.
Therefore, there is no reference to the mixed attribute of the base type
when doing extension in the redefinition.
Therefore, I'm obliged to specify mixed="true" in the redefinition in
order
to make it mixed (1.2.1.1 or 1.2.1.2) when doing extension.
Therefore, when doing extension, as you say for restriction, "you have
to
specify it if you want the new type to be mixed."
I am witnessing this behaviour during validation, and I'm trying to
justify
to someone who is making your claim, Stan, that extension shouldn't
change
the mixed property, that I have to change their redefinition by adding
the
mixed="true". So I'm trying to quote chapter and verse to prove that I
do,
indeed, even in extension, have to specify the mixed nature in the
redefinition.
Have I read the spec incorrectly? It looks to me like the spec is
unambiguous in this regard. I'm trying to find out where (or if) I'm
wrong. My customer is challenging my claim that I'm obliged to add this
attribute in the redefinition.
Thanks again for your comments, Stan.
................... Ken
--
World-wide on-site corporate, govt. & user group XML/XSL training.
G. Ken Holman mailto:gkholman@CraneSoftwrights.com
Crane Softwrights Ltd. http://www.CraneSoftwrights.com/x/
Box 266, Kars, Ontario CANADA K0A-2E0 +1(613)489-0999 (F:-0995)
Male Breast Cancer Awareness http://www.CraneSoftwrights.com/x/bc
Legal business disclaimers: http://www.CraneSoftwrights.com/legal
Received on Friday, 4 February 2005 22:18:17 UTC