This XFDL sample form demonstrates how to create a set of checkboxes so that only one checkbox can be selected (mutually exclusive) but without using an XForms select1 item (such as a checkgroup or radiogroup). You may need this type of functionality if you need these checkboxes to appear across table rows (a checkgroup item can't span rows). Or you may have special data model requirements which don't fit well with an XForms select1 (which stores its selection in a single node). As an added bonus, I added a bind which inserts row numbering into a label element in the table.
In any case, the approach that's demonstrated in this form leverages some interesting XPath, especially XPath axes. If you've never used or heard of XPath axes, you might be interested in looking them up on google, there are plenty of tutorials and explanations out there. Basically they allow you to select multiple XML elements based on their relationship to the current context node. For example, preceding/following siblings, preceding/following nodes across the whole document, and others.
In this example the strategy is to use XForms actions to seek out all the other checkboxes in our set and set them all to 'off' whenever the form filler clicks on one of the other checkboxes in the set. To do that, we'll use following-sibling and preceding-sibling XPath axes, so that we can find those other checkboxes in the set. In this scenario, our checkboxes are all in the same table. If they were spread out to other parts of the XML instance, you might need to use a different XPath axis like preceding/following to find the elements.
Getting down to the details, the interesting part in this form are the actions on the checkboxes. You'll notice there are two of them, the reason being that when the checkbox is activated, we need a way to iterate through all the other checkboxes in the set, except for THIS one and turn them all off. There might be other ways to do this (please post comments if you have ideas!) but my approach is to have one action which looks for checkbox elements above (preceding-sibling) and one action that looks for checkbox elements below (following-sibling). Both these actions contain while loops so that they will iterate through the elements just in case for some reason there are multiple checkboxes selected, but assuming it is all going smoothly, that case should never occur. The other important part is the if statement, to ensure that the action fires only if this checkbox's value has just changed to 'on'. If that isn't there, setting the checkboxes to off would also trigger their actions, and that turns off the checkbox that's just been checked, so that everytime you click a checkbox, if any other checkbox is also checked, you end up with none of the checkboxes turned on (they turn each other off).
Note that this technique can be extended adopted to situations where the checkboxes are not in a table. It works in Viewer and Webform Server.