Well, that was the other likely possibility!
Before I go further, my recommendation is that your data model should represent the data you are collecting as clearly as possible. I have a plan to enable you to use one termlist. However, choose that option if it is a good data model, not just to save a bit of effort setting up attributes ;-)
I have created a hierarchical termlist and here is a snippet from the termlists_terms table of the database.
--------------------------------------------
| id | termlist_id | term_id | parent_id |
|------|-------------|---------|-----------|
| 4827 | 362 | 4876 | |
| 4828 | 362 | 4877 | |
| 4829 | 362 | 4878 | |
| 4830 | 362 | 4879 | |
| 4831 | 362 | 4880 | 4827 |
| 4834 | 362 | 4883 | 4828 |
| 4835 | 362 | 4884 | 4828 |
| 4836 | 362 | 4885 | 4827 |
| 4837 | 362 | 4886 | 4827 |
--------------------------------------------
It is one termlist (termlist_id = 362)
It has 9 terms (each with a term_id)
Each has an id in the termlist_terms table which can appear in the parent_id column.
4827 is the parent of 3 children and 4828 is the parent of 2 children.
I conclude that the select chooses all terms with termlist_id = 362.
If we can add an extra filter, where parent_id is null, then it will only select the top level items.
I can add options to controls on the form in the Form Structure of the User Interface section (assuming you are using Drupal and the Sample with Occurrences form or similar). I happen to know that I can include additional database filters in the extraParams option. After a bit of digging I found a null value is a special case which is passed as a sting of 'NULL'
Thus, for my custom attribute (which happens to be a sample attribute with id of 571) I can insert my custom attribute and pass it an option as follows:
[smpAttr:571]
@extraParams={"parent_id":"NULL"}
This limits the select to just the top level items as desired.
Congratulations if you understood all that!
Jim Bacon.