<xsd:element name="roles">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="xsf:role" minOccurs="1" maxOccurs="unbounded" />
<xsd:element ref="xsf:membership" minOccurs="0" maxOccurs="1" />
</xsd:sequence>
<xsd:attribute name="default" type="xsd:string" use="required" />
<xsd:attribute name="initiator" type="xsd:string" use="optional" />
<xsd:attribute name="hideStatusBarDisplay" type="xsf:xdYesNo" use="optional" />
</xsd:complexType>
<!-- role names must be unique -->
<xsd:unique name="roles_name_unique">
<xsd:selector xpath="./xsf:role" />
<xsd:field xpath="@name" />
</xsd:unique>
<!-- fields must reference existing role -->
<xsd:key name="role_name_key">
<xsd:selector xpath="./xsf:role" />
<xsd:field xpath="@name" />
</xsd:key>
<xsd:keyref name="role_default" refer="xsf:role_name_key">
<xsd:selector xpath="." />
<xsd:field xpath="@default" />
</xsd:keyref>
<xsd:keyref name="role_initiator" refer="xsf:role_name_key">
<xsd:selector xpath="." />
<xsd:field xpath="@initiator" />
</xsd:keyref>
<xsd:keyref name="role_membership" refer="xsf:role_name_key">
<xsd:selector xpath="./xsf:membership/*" />
<xsd:field xpath="@memberOf" />
</xsd:keyref>
</xsd:element>
|