Re: Behaviour of <attribute> and <attributeGroup> in <restriction> element

Hi Hugh,

> Can anyone explain to me how <attribute> and <attributeGroup> work
> when they appear inside a <restriction> in a type defintion please?
>
> Are they used to restrict the permissible content of an attribute,
> the attributes in an attribute group?

Yes. For example, the "num" attribute could be restricted from being
any xs:integer to being an integer between 1 and 10.

> In particular can it be used to prohibit a specific attribute that
> was formerly permitted before the restriction was imposed (actually
> I hope this is NOT a possible use - the examples given in the primer
> seem to indicate I am right by virtue of the fact that they don't
> address this possibility)?

Yes, you can prohibit an attribute that was allowed in the base type
definition. You do this using the use="prohibited" attribute. For
example:

<xs:complexType name="person">
  <xs:attribute name="name" type="xs:token" />
  <xs:attribute name="age" type="xs:integer" />
</xs:complexType>

<xs:complexType name="ageless-person">
  <xs:complexContent>
    <xs:restriction base="person">
      <xs:attribute name="age" use="prohibited" />
    </xs:restriction>
  </xs:complexContent>
</xs:complexType>

Note that you can only prohibit optional attributes.

Other things that you can do on restriction are to make an attribute
required rather than optional, add a default value for the attribute,
or fix the attribute's value to the default value from the base type
definition.

Cheers,

Jeni

---
Jeni Tennison
http://www.jenitennison.com/

Received on Tuesday, 17 June 2003 11:05:29 UTC