- From: Kevin Braun <kbraun@obj-sys.com>
- Date: Wed, 29 Sep 2010 13:45:59 -0400
- To: trubliphone@googlemail.com
- CC: xmlschema-dev@w3.org
Hi,
You probably don't want to think in terms of OO here (or perhaps you
do...you don't override fields...). Think of extension as adding
attributes or appending content. Think of restriction as restricting
content or attributes.
In your case, which is probably simplified from your real scenario, you
could just have subElement in the child with minOccurs="1",
maxOccurs="1". Then, a ChildClass must have two subElements: the one
from the Parent, and then the one from the Child. However, note that
the contribution from the ChildClass must come at the end, so if your
real scenario has other elements involved, this may not give you the
ordering you want.
You might be able to make use of restriction. subElement{1,1} and
subElement{2,2} are both restrictions of subElement{1, 2} (using
{min,max} notation). In the first case, you are allowing fewer
subElements (max becomes only 1), in the second case you are requiring
more (min becomes 2). So, you might introduce a new Parent that allows
1 to 2 subElements, and then have two restrictions of that type, one
that forces 1 subElement and the other that forces 2.
I hope that helps some,
Kevin
--
Objective Systems, Inc.
REAL WORLD ASN.1 AND XML SOLUTIONS
http://www.obj-sys.com
On 9/29/2010 12:58 PM, trubliphone wrote:
> Hello. I have two complexTypes, one of which extends the other, and
> both which have a sub-element with the same name. However, the
> details of that element (type, min/maxOccurs,, etc.) can vary. In
> this example below, "parent" must have one "subElement" and "child"
> must have two:
>
> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
>
> <xs:complexType name="ParentClass">
> <xs:sequence>
> <xs:element name="subElement" minOccurs="1" maxOccurs="1"/>
> </xs:sequence>
> </xs:complexType>
>
> <xs:complexType name="ChildClass">
> <xs:complexContent>
> <xs:extension base="ParentClass">
> <xs:sequence>
> <xs:element name="subElement" minOccurs="2" maxOccurs="2"/>
> </xs:sequence>
> </xs:extension>
> </xs:complexContent>
> </xs:complexType>
>
> <xs:element name="root">
> <xs:complexType>
> <xs:sequence>
> <xs:element name="parent" type="ParentClass"/>
> <xs:element name="child" type="ChildClass"/>
> </xs:sequence>
> </xs:complexType>
> </xs:element>
>
> </xs:schema>
>
> However, when I create an XML file, "child" actually has three
> "subElements:" one from the "ParentClass" it extends and the two it
> defines itself. Does anybody know a way around this? I am basically
> hoping for an "oo-style" solution, where the child's sub-element
> _overrides_ the parent's sub-element of the same name. Is that
> possible in XSD?
>
> Thanks.
>
Received on Wednesday, 29 September 2010 17:53:09 UTC