- From: John Boyer <boyerj@ca.ibm.com>
- Date: Wed, 19 Jan 2011 17:27:55 -0800
- To: Kurt Cagle <kurt.cagle@gmail.com>
- Cc: Leigh L Klotz Jr <leigh.klotz@xerox.com>, public-forms@w3.org
- Message-ID: <OF8E97BDAA.AFAF1737-ON8825781E.000769DC-8825781E.00080CA1@ca.ibm.com>
Hi Leigh and Kurt,
Absolutely, +110%.
Though particularly acute in XHTML, this is a pain in the neck for *any*
XForms host language. The form workarounds needed to ensure a11y while
still offering precision control over the visual rendition are ugly and
reduce performance. The processor/language is the better place to make
this connection.
>From a schema perspective, this would mean that at least xf:label would
become a top-level element. Although xf:label is part of a cluster of
metadata elements that include hint, help and alert, I imagine you mean to
do this only for label, right?
Cheers,
JB
From:
Kurt Cagle <kurt.cagle@gmail.com>
To:
Leigh L Klotz Jr <leigh.klotz@xerox.com>
Cc:
public-forms@w3.org
Date:
01/19/2011 05:02 PM
Subject:
Re: An heresy about labels for XForms 1.2
Personally, I believe that this is long overdue, as labels in the current
structure have to be some of the most irritating aspects of XForms.
A couple of use cases to consider:
<table>
<xf:repeat>
<tr>
<td><xf:output ref="foo"><xf:label>Foo</xf:label></td>
<td><xf:output ref="bar"><xf:label>Bar</xf:label></td>
<td><xf:output ref="bat"><xf:label>Bat</xf:label></td>
</tr>
</xf:repeat>
</table>
is not an usual situation for XForms usage (yes, I know it's technically
illegal because of the way that HTML is specified, but bear with me)
Without knowing apriori the substrate structure around this form fragment,
the label should end up repeating multiple times, once for each property.
This is probably not the desired goal. However, rendering this so that it
appears in a consistent manner with CALS tables elsewhere is one of the
CSS nightmares reserved for the truly damned.
To me, the logical mapping for this would be:
<table>
<tr>
<th><xf:label for="_foo">Foo</xf:label></th>
<th><xf:label for="_bar">Bar</xf:label></th>
<th><xf:label for="_bat">Bat</xf:label></th>
</tr>
<xf:repeat nodeset="records/record">
<tr>
<td><xf:output ref="foo" id="_foo"/></td>
<td><xf:output ref="bar" id="_bar"/></td>
<td><xf:output ref="bat" id="_bat"/></td>
</tr>
</xf:repeat>
</table>
Not only does this turn the labels into column headers, but it also makes
it far easier to render this kind of structure.
Similarly, if you have mediatype content, labels can be problematic. For
instance, consider:
<xf:output ref="myImageUrl" mediatype="img/*">
<xf:label ref="../myImageUrlTitle"/>
</xf:output>
In the above case, it's often preferable to render the label either above
or below the picture, but the CSS to do this is actually pretty complex,
especially when dealing with floating content.
<div>
<div><xf:output ref="myImageUrl" mediatype="img/*" id="image"/></div>
<div><xf:label ref="myImageUrlTitle" for="image"/></div>
</div>
is far more self evident in its execution and works on the same context as
the output rather than having to ascend to the original context.
I think the biggest argument for @for would be in languages such as SVG,
where labels may very well be specified at a very different part of the
underlying rendering than the associated controls. The containment
structure can be worked around somewhat there, but having independent
labels could make development of these controls considerably less of a
headache.
I'd recommend strongly that we incorporate @for into xf:label and possibly
into xf:message as well (modeless xf:messages in particular would be a
very good candidate, as these may as often as not appear either in
tooltips, to the right of or below the corresponding component, all of
which have rendering issues.
Kurt Cagle
XML Architect
Lockheed / US National Archives ERA Project
On Wed, Jan 19, 2011 at 5:58 PM, Leigh L Klotz Jr <leigh.klotz@xerox.com>
wrote:
For a number of years, I've struggled and watched others struggle using
CSS to control XForms layout.
By all rights, XForms and CSS should be easier to lay out than HTML4
forms, but even making allowances for the lack of CSS3 pseudo-property and
pseudo-element support, and even after the Venice Accord proclaiming
standard CSS class names for XForms elements and model item property
states, it's remains a difficult task to control the layout of form
controls and labels.
XForms has a strong connection between a form control and its label, and
for A11Y reasons not only requires labels, but captures the connection
between them by hierarchy: a label is contained immediately within the
control it labels.
Unfortunately, this container-ship, and more importantly the document
order, makes it much more difficult to lay out XForms labels on the page
than it is to lay out HTML4 forms and their labels.
HTML4 provides a nod to A11Y by giving label an attribute "for" which is
the ID of the form control to which it corresponds.
I'd like to suggest we experiment with this same mechanism: require form
controls to have labels, but allow the label to be id-linked with
label/@for instead of required by a schema expressing a required child
element. Of course, we'd need to specify the id-resolution rules in
repeat as the same as setfocus/@control. More importantly, we'd need to
tell implementors that MIP properties such as readonly and required and
relevant must apply to the label/@for a control just as if the label were
contained lexically within the form control.
In result, we would still retain the A11Y features of HTML4 forms, and
make it easier to author XHTML+XForms for today's authors, while still
allowing all existing XForms input/label structure. XForms 1.0 processors
would likely even process the label/@for mostly correctly, except for the
propagation of MIP states.
What do others think about my heresy?
Leigh.
Received on Thursday, 20 January 2011 01:28:46 UTC