- 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