Re: <key> problems.

Hi Kevin,

> I understand that a single key cannot assert the uniqueness of FormIDs
> and FieldIDs within those, as that would be a multi-stage key. Lets
> assume this uniqueness does not exist, and something like this was valid:
>
> <IDs>
>   <Form FormID="FORM_1">
>     <Field FieldID="FIELD_1"/>
>   </Form>
>   <Form FormID="FORM_2">
>     <Field FieldID="FIELD_1"/>
>   </Form>
>   <Form FormID="FORM_1">  <!-- NOTE: FORM_1 again -->
>     <Field FieldID="FIELD_2"/>
>   </Form>
> </IDs>
>
> Could I not have a multipart key which consists of:
>   {@FormID @FieldID}
>
> which in this example would give:
>   {FORM_1 FIELD_1}
>   {FORM_2 FIELD_1}
>   {FORM_1 FIELD_2}

In this case, you could because you could make a key that selected
each *Form* element and created an entry for its FormID attribute and
its child Field's FieldID attribute:

  <xs:key name="...">
    <xs:selector xpath="Form" />
    <xs:field xpath="@FormID" />
    <xs:field xpath="Field/@FieldID" />
  </xs:key>

But this would rely on you only having one Field under each Form -
otherwise the key would not be valid.
  
> By my understanding this would be a multipart key not a multi-stage
> key, because it is only the combination of FormID and FieldID which
> is being constrained.
>
> Functionally it would do what I want, as I could set a keyref to check
> that:
>
>   <Check FormID="FORM_1" FieldID="FIELD_2"/>
>
> does actually refer to the {FORM_1 FIELD_2} entry in of the key??

You could write a keyref to the above key based on those attributes no
problem.

Cheers,

Jeni

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

Received on Monday, 19 November 2001 08:07:41 UTC