W3C home > Mailing lists > Public > xmlschema-dev@w3.org > August 2009

Re: Restricting attribute use from optional to required

From: (wrong string) řidal <jan.pridal@gmail.com>
Date: Fri, 28 Aug 2009 10:48:29 +0200
Message-ID: <b6c018bb0908280148v6a52c466m70e5191706e1b104@mail.gmail.com>
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 GMT

This archive was generated by hypermail 2.2.0+W3C-0.50 : Tuesday, 11 January 2011 00:15:14 GMT