- From: Aaron M Leventhal <aleventh@us.ibm.com>
- Date: Tue, 20 May 2008 16:10:46 +0200
- To: ht@inf.ed.ac.uk (Henry S. Thompson)
- Cc: Henri Sivonen <hsivonen@iki.fi>, "public-html@w3.org" <public-html@w3.org>, public-html-request@w3.org, "public-xhtml2@w3.org" <public-xhtml2@w3.org>, "wai-xtech@w3.org" <wai-xtech@w3.org>, "www-tag@w3.org" <www-tag@w3.org>, w3c-wai-pf@w3.org
- Message-ID: <OFB77499F1.644FF272-ONC125744F.003734A8-C125744F.004E0AFF@us.ibm.com>
Hi Henry, can you please take a look at my experience converting an ARIA
example to use the colon. It's an ARIA checkbox that was first built
several years ago in order to test Mozilla's ARIA support.
I was reading your analysis at
http://www.w3.org/QA/2008/05/syntax_for_aria_costbenefit_an.html#analysis
It says that setAttribute("aria:checked") will work the same in html as in
application/xhtml+xml. I read this in the Cost-benefits analysis table
under benefits of the colon: "Consistency for page authors; Uniform DOM
access (using Get/SetAttribute); Orthogonal in XML languages; consistent
with namespace-based extensibility for XML (and for HTML5?1) "
I was surprised that it all sounded pretty simple so I set out to convert
my checkbox example to use the colon, both in HTML and XHTML.
Test cases with hyphen (known to work):
ARIA checkbox in HTML with aria-checked:
https://bugzilla.mozilla.org/attachment.cgi?id=321761
ARIA checkbox in XHTML with aria-checked:
https://bugzilla.mozilla.org/attachment.cgi?id=321763
New test cases with colon:
ARIA checkbox in HTML with aria:checked:
http://www.mozilla.org/access/dhtml/checkbox-colons.html
ARIA checkbox in XHTML with aria:checked:
http://www.mozilla.org/access/dhtml/checkbox-colons.xhtml
Converting to the HTML version using colon was in fact simple except that
it no longer worked in IE7 because \: doesn't work there. But, since
attribute selectors don't work in IE6 anyway, it's possibly an acceptable
loss. It means we will need to write extra code to change styles directly,
but let's forget about that for now.
Converting to XHTML turned out to be a difficult struggle. Here's what
happened:
I kept the script the same, apparently there was a silent error which I
almost missed. By silent I mean that at first it appeared to work. There
was no parsing error or JavaScript console warning. If I clicked on the
checkbox a number of times it started toggling. No problem, I thought
everything was the same. However, something seemed strange. A subtle bug
was introduced where the first click or space key press on the checkbox
was ignored, and then toggling appeared to work after that.
I had forgotten that in XHTML the CSS should say aria|checked instead of
aria\:checked. So it was my mistake, but one caused by an unexpected
difference between HTML and XHTML. I fixed the CSS, and suddenly the
checkbox shows up correctly checked initially. Cool! I clicked the
checkbox and it appeared to work. But now I was suspicious, and kept
testing. I discovered that the checkbox ignored any clicks after the first
one. Once it was unchecked I could no longer recheck it.
Here's what I learned about the colon after my debugging session:
1. Depending on whether I'm in HTML or XHTML, depending on whether I
declare or set the ARIA property, or depending on whether I use
setAttribute or setAttributeNS, the aria:checked attribute shows up
differently in the DOM.
2. setAttribute works differently from either getAttribute or
removeAttribute with "foo:bar". Where namespaces are supported,
setAttribute("foo:bar") doesn't use DOM namespaces, but the other methods
do. If namespaces are ever added to HTML, either that inconsistency will
need to remain or we'd instead be introducing a difference with how XHTML
supports setAttribute().
3. Safari acted like Mozilla, but Opera didn't work with the new example
at all.
This all confused me and I spent quite a lot of time puzzling out what was
happening. It took longer because it seemed so counterintuitive. My brain
did not want to accept the same attribute in the DOM using different
methodologies at different times.
The analysis document had told me that setAttribute("aria:checked") will
just work the same in XHTML, but it did not turn out to be true. Believing
that resulted in bugs which were very hard for me to discover, understand
and fix. I grew tired and frustrated trying to understand how the two
different uses of colons were intermixing in the DOM before I could fix
them. My brain spun thinking about what happens if both kinds of
attributes are set.
Let's say that authors just need to be smart and understand all of this,
do the extra work to understand this and test it, and that they won't be
put off by the inconsistencies. Let's say that current implementations
will all be changed within a year or so and that users will all update
their software. There is still a problem if we want to leave the
possibility open for namespaces in text/html. Basically, unless the colon
means something different from it is used in XHTML now, that will mean
that depending on whether you declare an attribute, use setAttribute() or
get/removeAttribute(), or use the blahAttributeNS() methods, DOM
namespaces will be used or ignored. I can think of a lot of ways authors
and implementations will get confused.
I'm very concerned that there is not a realistic view about how much this
will hurt authors. I enjoy working with such bright W3C standards
developers, but these are not your average developer. Very rarely do
developers understand how colon acts differently in different places. If
they're like me, they think they understand it one minute and then learn
they were wrong when someone reports a bug. Many aspects are just bugs
waiting to happen: poorly-documented, counter-intuitive suprises. To be
honest I haven't found many developers interested in using up their brain
cells to figure this out. I would not think that I'm alone in my confusion
with the colon. Anyone who isn't confused either spent a lot of their
careers understanding it or don't realize what they misunderstand. Most
developers would rather spend their time working out real solutions for
real users. I'm not sure I even understand what the issues are well enough
myself, to update tutorials and docs that I've written or help developers
who ask.
In general, I don't feel qualified to understand how colon works across
browsers, mime types and uses, but I do feel qualified that the new use of
colon has too many weird edges, and is too complicated for the intended
audience of ARIA. Perhaps I'm not credible since I am obviously vested in
Firefox 3 and Dojo's current ARIA implementations. However, I think
reading this, other people that need to educate developers on ARIA will
agree this is just too much to deal with. This really isn't about liking
namespaces or not. I'm personally not qualified to say much about them.
While I am respectful of the general desire to not throw out W3C's
namespace architecture after years of work, I think that recommending
colon to support fake namespaces only hurts the real namespace cause.
Let's keep the simple approach for ARIA properties, which works well now
and is the same no matter where it's used. I'm sorry that it isn't the
originally intended way to do these things, but that's not where the web
is. ARIA is for solving accessibility problems in content today. We can
reserve the colon for true, pure namespaces in text/html in case the
community decides to pursue that.
- Aaron
From:
ht@inf.ed.ac.uk (Henry S. Thompson)
To:
Henri Sivonen <hsivonen@iki.fi>
Cc:
"www-tag@w3.org" <www-tag@w3.org>, "public-html@w3.org"
<public-html@w3.org>, "public-xhtml2@w3.org" <public-xhtml2@w3.org>,
"wai-xtech@w3.org" <wai-xtech@w3.org>
Date:
05/15/2008 03:14 PM
Subject:
Re: Next steps for the ARIA syntax discussion
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Henri Sivonen writes:
> First, the "Matches CSS Selector" result for SVG looks weird. I don't
> see which test case this result came from.
You're right, that's misleading. Although SVG Tiny doesn't support
CSS from stylesheets at all, SVG 1.0 and 1.1 did, and SVG 1.2 will I
guess, so I should have tested that -- I had misread something which
made me thing SVG 1.0/1.1 didn't support attribute selectors at all.
ht
- --
Henry S. Thompson, HCRC Language Technology Group, University of
Edinburgh
Half-time member of W3C Team
2 Buccleuch Place, Edinburgh EH8 9LW, SCOTLAND -- (44) 131 650-4440
Fax: (44) 131 650-4587, e-mail: ht@inf.ed.ac.uk
URL: http://www.ltg.ed.ac.uk/~ht/
[mail really from me _always_ has this .sig -- mail without it is forged
spam]
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.6 (GNU/Linux)
iD8DBQFILDc7kjnJixAXWBoRAkh8AJ41PLOUR6M8OootgbgTCfTr8B4RBwCcDjUF
bgtHuUkitO5v4CXKxFVhINg=
=sZ/l
-----END PGP SIGNATURE-----
Received on Tuesday, 20 May 2008 14:13:42 UTC