Home. 
.

transparent

transparent

transparent

Altova Mailing List Archives


Re: Restricting attribute use from optional to required

From: =?ISO-8859-2?Q?Jan_P=F8idal?= <jan.pridal@-----.--->
To: xmlschema-dev@--.---
Date: 8/28/2009 8:51:00 AM
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@s...>:
>
> 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@w...
>> [mailto:xmlschema-dev-request@w...] On Behalf Of Jan Pridal
>> Sent: 26 August 2009 08:23
>> To: xmlschema-dev@w...
>> 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@s...>:
>> >> 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
>> >
>> >
>>
>
>



transparent
Print
Mail
Like It
Disclaimer
.

These Archives are provided for informational purposes only and have been generated directly from the Altova mailing list archive system and are comprised of the lists set forth on www.altova.com/list/index.html. Therefore, Altova does not warrant or guarantee the accuracy, reliability, completeness, usefulness, non-infringement of intellectual property rights, or quality of any content on the Altova Mailing List Archive(s), regardless of who originates that content. You expressly understand and agree that you bear all risks associated with using or relying on that content. Altova will not be liable or responsible in any way for any content posted including, but not limited to, any errors or omissions in content, or for any losses or damage of any kind incurred as a result of the use of or reliance on any content. This disclaimer and limitation on liability is in addition to the disclaimers and limitations contained in the Website Terms of Use and elsewhere on the site.

.
.

transparent

transparent