- From: Jan Pridal <jan.pridal@gmail.com>
- Date: Fri, 28 Aug 2009 10:48:29 +0200
- To: xmlschema-dev@w3.org
So basically you're telling me that I don't have to repeat all attributes from attributeGroup in restriction and it is sufficient to just list the changed ones, that is the 'label' attribute in my case? <xsd:complexType name="parentWithReqLabelAttr"> <xsd:complexContent> <xsd:restriction base="parent"> <xsd:group ref="commonElements"/> <xsd:attribute name="label" type="xsd:string" use="required"/> <!-- no need to list all remaining attributes from 'attributes' group --> </xsd:restriction> </xsd:complexContent> </xsd:complexType> -Jan Pridal 2009/8/26 Michael Kay <mike@saxonica.com>: > > There's an assymetry here between attributes and child elements. For the > content model (child elements), when you restrict a type you have to restate > all the parts of the content model that you want to inherit. For attributes, > you only have to list the things that have changed - any other attributes > are inherited automatically. > > (No, I can't justify why it was designed that way. Like most things in XSD, > it was probably because there were too many bright people on the committee > and each of them got their way on one feature of the language.) > > Regards, > > Michael Kay > http://www.saxonica.com/ > http://twitter.com/michaelhkay > > >> -----Original Message----- >> From: xmlschema-dev-request@w3.org >> [mailto:xmlschema-dev-request@w3.org] On Behalf Of Jan Pridal >> Sent: 26 August 2009 08:23 >> To: xmlschema-dev@w3.org >> Subject: Re: Restricting attribute use from optional to required >> >> OK, so let's say we get rid off this repeating of content >> model declaration using named model group, see below. >> There's still one place I'd like to fix - the enumeration of >> all attributes from 'attributes' attributeGroup inside the >> 'parentWithReqLabelAttr' type declaration. >> >> <xsd:attributeGroup name="attributes"> >> <xsd:attribute name="label" type="xsd:string" /> >> ... >> </xsd:attributeGroup> >> >> <xsd:group name="commonElements"> >> <xsd:sequence> >> ... >> </xsd:sequence> >> </xsd:group> >> >> <xsd:complexType name="parent"> >> <xsd:group ref="commonElements"/> >> <xsd:attributeGroup ref="attributes"/> </xsd:complexType> >> >> <xsd:complexType name="parentWithReqLabelAttr"> >> <xsd:complexContent> >> <xsd:restriction base="parent"> >> <xsd:group ref="commonElements"/> >> <xsd:attribute name="label" type="xsd:string" use="required"/> >> ... list all remaining attributes from 'attributes' group!!! >> </xsd:restriction> >> </xsd:complexContent> >> </xsd:complexType> >> >> <xsd:complexType name="derivedWithOptLabelAttr"> >> <xsd:complexContent> >> <xsd:extension base="parent"> >> <xsd:sequence> >> <xsd:element ref="style"/> >> </xsd:sequence> >> <xsd:attribute name="icon" type="xsd:string" use="optional"/> >> </xsd:extension> >> </xsd:complexContent> >> </xsd:complexType> >> >> <xsd:complexType name="derivedWithReqLabelAttr"> >> <xsd:complexContent> >> <xsd:extension base="parentWithReqLabelAttr"> >> <xsd:sequence> >> <xsd:element ref="parameter" minOccurs="0" >> maxOccurs="unbounded"/> >> </xsd:sequence> >> <xsd:attribute name="name" type="xsd:string" use="required"/> >> </xsd:extension> >> </xsd:complexContent> >> </xsd:complexType> >> >> I'd like to have there something like a restriction of >> attributeGroup, either local or a global inside the type >> 'parentWithReqLabelAttr': >> >> <xsd:attributeGroup name="attributesWithReqLabelAttr"> >> <xsd:attributeGroup ref="attributes"> >> <xsd:attribute ref="label" use="required"/> >> </xsd:attributeGroup> >> </xsd:attributeGroup> >> >> If this can be achieved then I would be able to add a new >> attribute to the 'attributes' attributeGroup without changing >> the 'parentWithReqLabelAttr' type. However as far as I know >> there's no such mechanism. >> >> Jan Pridal >> >> 2009/8/17 Michael Kay <mike@saxonica.com>: >> >> But it is then more than a little bit awkward - as I have to add a >> >> new complexType that restricts the complexType 'parent' >> >> and then within it I have to repeat all the stuff declared the >> >> 'parent' and its parent types (by extension) etc. >> > >> > Yes, that's a particularly nasty feature of derivation by >> restriction. >> > >> > If you're only restricting the attributes, and not the >> content model, >> > you can get around it by having both the base type and the derived >> > type reference the same named model group. >> > >> > Regards, >> > >> > Michael Kay >> > http://www.saxonica.com/ >> > http://twitter.com/michaelhkay >> > >> > >> > >
Received on Friday, 28 August 2009 08:49:11 UTC