- From: Jeni Tennison <jeni@jenitennison.com>
- Date: Fri, 23 Nov 2001 17:48:39 +0000
- To: Guillaume Rousse <rousse@ccr.jussieu.fr>
- CC: xmlschema-dev@w3.org
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