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: Wed, 26 Aug 2009 09:22:53 +0200
Message-ID: <b6c018bb0908260022u13172a3p326187f50a90591d@mail.gmail.com>
To: xmlschema-dev@w3.org
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 Wednesday, 26 August 2009 07:23:34 GMT

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