- From: Henry S. Thompson <ht@cogsci.ed.ac.uk>
- Date: 26 Mar 2003 10:07:54 +0000
- To: "Hugh Wallis" <hugh_wallis@hyperion.com>
- Cc: <xmlschema-dev@w3.org>
"Hugh Wallis" <hugh_wallis@hyperion.com> writes: > As a corollary to my earlier question on successive restriction of simple > content in complex types: > > In my xbrli namespace I have the following type: > > <complexType name="stringItemType"> > <simpleContent> > <extension base="string"> > <attribute name="nonNumericContext" type="IDREF" use="required"/> > <anyAttribute namespace="##other" processContents="lax"/> > </extension> > </simpleContent> > </complexType> > > I now define a new type in my dt namespace as follows: > > <complexType name="accountTypeItemType"> > <simpleContent> > <restriction base="xbrli:stringItemType"> > <enumeration value="account"/> > <enumeration value="bank"/> > <enumeration value="employee"/> > <enumeration value="customer"/> > </restriction> > </simpleContent> > </complexType> > > > Suppose I now want to define another type in another namespace that has as > simpleContent the enumerations from dt:accountTypeItemType and, in addition: > > <enumeration value="job"/> > <enumeration value="vendor"/> > <enumeration value="fixed-asset"/> > > What is the best way to do this? I would like the resulting type to derive > from xbrli:stringItemType but I want to have a modular system that doesn't > require me to re-enumerate the list from accountTypeItemType in my new type. > Is this even possible in XML Schema? Yes, but only if you know in advance that you're going to do this -- restrictions must be explicitly restrictions, if you see what I mean. Otherwise you could do it with a union after the fact, as it were. Then pull merge you first (aTIT) enumerations and the new ones as a named simple type: <simpleType name="manyItemTypes"> <restriction base="string"> <enumeration value="account"/> <enumeration value="bank"/> <enumeration value="employee"/> <enumeration value="customer"/> <enumeration value="job"/> <enumeration value="vendor"/> <enumeration value="fixed-asset"/> </restriction> </simpleType> Then restrict _that_ in aTIT: <complexType name="accountTypeItemType"> <simpleContent> <restriction base="xbrli:stringItemType"> <simpleType> <restriction base="my:manyItemTypes"> <enumeration value="account"/> <enumeration value="bank"/> <enumeration value="employee"/> <enumeration value="customer"/> </restriction> </simpleType> </restriction> </simpleContent> </complexType> It would be nicer to use a union: <simpleType name="moreItemType"> <union memberTypes="my:accountItemTypes"> <simpleType> <restriction base="string"> <enumeration value="job"/> <enumeration value="vendor"/> <enumeration value="fixed-asset"/> </restriction> </simpleType> </union> </simpleType> but that's not a explicitly restriction of string, so it won't work. Note if I were you I'd use 'token' rather than 'string' throughout. Hope this helps a bit. ht -- Henry S. Thompson, HCRC Language Technology Group, University of Edinburgh Half-time member of W3C Team 2 Buccleuch Place, Edinburgh EH8 9LW, SCOTLAND -- (44) 131 650-4440 Fax: (44) 131 650-4587, e-mail: ht@cogsci.ed.ac.uk URL: http://www.ltg.ed.ac.uk/~ht/ [mail really from me _always_ has this .sig -- mail without it is forged spam]
Received on Wednesday, 26 March 2003 05:07:56 UTC