Re: Restricting attribute use from optional to required

I feared it was so :-)

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., and eventually I have to use the new
complexType as a base of 'derived' complextType. Also I do not like
the section in the new complexType declaration where I have to list
all attributes of the attributeGroup one by one.

<xsd:attributeGroup name="attributes">
  ...
  <xsd:attribute name="label" type="xsd:string" />
</xsd:attributeGroup>

<xsd:complexType name="parent">
  <xsd:complexContent>
      ...
      <xsd:attributeGroup ref="attributes"/>
  </xsd:complexContent>
</xsd:complexType>

<xsd:complexType name="parentWithRequiredLabelAttribute">
   <xsd:complexContent>
       <xsd:restriction base="parent">
           <xsd:sequence>
               ... list all elements of 'parent' type etc.
           </xsd:sequence>
           ...
           <xsd:attribute name="label" type="xsd:string" use="required"/>
           ...
           ... and list all remaining attributes from attributeGroup
called ''attributes"
           ...
       </xsd:restriction>
   </xsd:complexContent>
</xsd:complexType>

<xsd:complexType name="derived">
  <xsd:complexContent>
      <xsd:extension base="parentWithRequiredLabelAttribute">
          <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>

Or am I missing something and it could be done better?

Thank you for all your help,
-Jan Pridal

2009/8/16 Michael Kay <mike@saxonica.com>:
>
> You can do this, but only in an <xs:restriction>, not in an <xs:extension>
>
> 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: 14 August 2009 13:42
>> To: xmlschema-dev@w3.org
>> Subject: Restricting attribute use from optional to required
>>
>> Hello all,
>> my question follows, I am using XML Schema 1.0.
>>
>> I have an attributeGroup with an optional attribute. This
>> attributeGroup is used in declaration of complexType. Another
>> complexType is then an extension of that complexType. Please
>> see my sample code below.
>>
>> I would like to declare the attribute 'label' as required for
>> the 'derived' complexType. Is there any legal way to do it?
>>
>> <xsd:attributeGroup name="attributes">
>>     ...
>>     <xsd:attribute name="label" type="xsd:string" />
>> </xsd:attributeGroup>
>>
>> <xsd:complexType name="parent">
>>     <xsd:complexContent>
>>         ...
>>         <xsd:attributeGroup ref="attributes"/>
>>     </xsd:complexContent>
>> </xsd:complexType>
>>
>> <xsd:complexType name="derived">
>>     <xsd:complexContent>
>>         <xsd:extension base="parent">
>>             <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>
>>
>> Regards,
>> Jan Pridal
>>
>>
>
>

Received on Monday, 17 August 2009 13:12:35 UTC