- From: Chris Lilley <chris@w3.org>
- Date: Fri, 10 Jan 2003 17:37:37 +0100
- To: Jeni Tennison <jeni@jenitennison.com>
- CC: www-tag@w3.org
On Friday, January 10, 2003, 4:44:33 PM, Jeni wrote:
JT> Hi Chris,
>> If I have omitted a solution, or omitted significant advantages or
>> disadvantages, I would be glad to hear them.
JT> You missed the option:
JT> Add an inline, per subtree multiple ID declaration method
JT> In the same way that xml:base added a predeclared attribute to the
JT> existing xml:lang and xml:space attributes, add another one called
JT> xml:idAttrs. It takes as value a whitespace-separated list of the
JT> local names of attributes. All attributes with one of those names in
JT> the per-element partition, on that element and its children become
JT> of type ID. It can be used on any element. It can also take the
JT> value "" in which case, no attributes on that element or its
JT> children are declared to be of type ID (used when composing multiple
JT> namespaces). An xml:idAttrs on a child completely overrides that on
JT> its parent.
OK let me think about one. Thanks for suggesting it and formatting it
as the others - I can see that some revision of the options document
will soon be in order, which I sort of comitted to by asking for
contributions and revisions.
JT> Say you had:
JT> <foo>
JT> <bar id="fred" />
JT> <baz ID="barney" />
JT> </foo>
JT> and both id and ID are IDs. With xml:idAttr you could do:
JT> <foo xml:idAttr="id">
JT> <bar id="fred" />
JT> <baz xml:idAttr="ID" ID="barney" />
JT> </foo>
JT> As I understand it, if <baz> had an id attribute then that would also
JT> be counted as an ID. Is that correct, or is your intention that there
JT> is only ever be one attribute in scope as an ID attribute at any one
JT> time?
The latter. I imagined that only one attribute of type ID could be in
scope on an element at a given time. I should revise the description
to make it clearer.
JT> xml:idAttrs would allow multiple attributes to be labelled as ID
JT> attributes; in this example you could do:
JT> <foo xml:idAttrs="id ID">
JT> <bar id="fred" />
JT> <baz ID="barney" />
JT> </foo>
Uh okay but lets now say that we have a namespace toto where id is an
ID attribute and partnum is CDATA; and another namespace tata where
partnum is an ID and id is CDATA. With your proposal I would be unable
to describe the multi-namespace document
<?xml version="1.0" encoding="UTF-8"?>
<foo xml:idAttr="id partnum">
<toto id="zeus" partnum="a54321" xmlns="http://toto"/>
<tata id="hera" partnum="x12345" xmlns="http://tata"/>
</foo>
because it would make both id and partum into IDs on all elements.
This would force uniqueness checking on attributes where it was not
desirable.
This is why option 5 is inflexible; it requires multi-namespace
documents to have all their ID attributes changed to a single name.
Option 6 allows integration of XML snippets from multiple namespaces
without alteration. This seems beneficial in, say, an XSLT context.
JT> I'm not sure this would be my favoured option, but I think it should
JT> be added for completeness. It has the advantage that it makes altering
JT> documents with mixed namespaces (and with different names for ID
JT> attributes in those namespaces) easier than xml:idAttr.
I will add it for completeness but I don't think it makes them easier;
it seems to make them harder if anything because the list of potential
false positives grows as you add more namespaces. I appreciate the
benefits to the parser of getting a list up front on the root element,
but I think a more scoped solution would have less unintended side
effects.
I clearly should have been more specific that option 6 was analogous
to xml:lang and xml: base in that it is scoped and that occurrences of
it push the old value and establish a new value for that element and
its children until overridden in turn.
--
Chris mailto:chris@w3.org
Received on Friday, 10 January 2003 11:37:43 UTC