Re: use of xml:lang

Hi Guillaume,

> I'm currently thinking of a key to ensure unicity, but is it not
> overkill ?

No, I think that will work quite well. Using the second XML structure,
you need to define the key within the element declaration for the name
element, as follows:

  <xs:element name="name">
    ...
    <xs:key name="languageKey">
      <xs:selector xpath="language" />
      <xs:field xpath="@xml:lang" />
    </xs:key>
  </xs:element>

This says "within every name element, each language element has a
unique value for its xml:lang attribute".

Using the first XML structure, you need to define the key on the
country element, as follows:

  <xs:element name="country">
    ...
    <xs:key name="languageKey">
      <xs:selector xpath="name" />
      <xs:field xpath="@xml:lang" />
    </xs:key>
  </xs:element>

This says "within every country element, each name element has a
unique value for its xml:lang attribute".

> And i doubt it will allow a default value (without xml:lang
> attribute) in either case.

You're right that xs:key will object if a language element doesn't
have an xml:lang attribute. I suggest that when you declare the
language element, you give the xml:lang attribute a default, which
will be assigned if the xml:lang attribute is missing, so that you can
use the key, as follows:

  <xs:element name="language">
    <xs:complexType>
      ...
      <xs:attribute ref="xml:lang" default="en" />
    </xs:complexType>
  </xs:element>

[I assume the default is 'en' since the ones lacking xml:lang seem to
be in English! :)]

The other alternative is to use xs:unique rather than xs:key, but this
will permit several language elements without xml:lang attributes,
which you don't want.

I hope that helps,

Jeni

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

Received on Friday, 23 November 2001 12:48:42 UTC