[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [Elist Home]
Subject: ID/IDREF strawman
Here is a strawman proposal to satisfy the requirements for our ID/IDREF replacement mechanism that we identified at the telcon. Introduce two new elements, <key>, <keyRef>. These each have a required name attribute whose value is an NCName. There content is either empty or a pattern. Empty content is equivalent to <anyString/> (as with <attribute>). There are the following restrictions on key, keyRef: - the content pattern must not allow elements or attributes - the content pattern must not contain key, keyRef - there is the same restriction on grouping key, keyRef that there is with grouping data/string - use of key, keyRef must be unambiguous in the sense that you can always unambiguosly determine the name of a key/keyRef (if any) that an element or attribute contains (more on this in a subsequent message) - all key/keyRefs of a particular name must have the same content pattern (or at least the same base datatype) The informal semantics are as follows. A forest matches an key/keyRef pattern if it matches the content pattern. Matching a sequence of characters (ie a text node) against a key/keyRef pattern has the side-effect of "tagging" the text node as being a key/keyRef of a particular name. The document matched as a whole must satisfy the following constraints: - for any key name x, all text nodes tagged as being keys named x must have distinct values - for any key name x, for any text node n tagged as being keyref named x there must be a text node n' tagged as being a key named x such that the values of n and n' are equal For example, in cases where you might say: <attribute name="id"> <data type="xsd:ID"/> </attribute> you would instead say: <attribute name="id"> <key name="whatever"/> </attribute> or if you want to restrict IDs to being NMTOKENs, you would do: <attribute name="id"> <key name="whatever"> <data type="xsd:NMTOKEN"/> </key> </attribute> Similarly, instead of: <attribute name="ref"> <data type="xsd:IDREF"/> </attribute> you might say: <attribute name="ref"> <keyRef name="whatever"/> </attribute> Describing the semantics and restrictions rigourously is going to be quite "interesting". James
[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [Elist Home]
Powered by eList eXpress LLC