Tinderbox Forum

Main Topic and Minor Topics

Hi Everyone. I’m working on a major environmental risk assessment, so it was probably stupid to implement Tinderbox for this, since I’ve never used it before this project, but here I am. I have agents set up for “fish” “benthos” “modeling,” etc., using queries such as $TopicType=“Fish”. However, ecosystems are complex things and, even though the main topic might be about fish (info mostly dropped in from DEVONthink Pro Office, which is another question in my head altogether) I also would like to capture info from the fish article that might also address, say, mollusks or something like that. How do I make the “Fish” agent also search for mollusks and toss aliases or whatever into my mollusk container (or adornment) as well as the fish container? I apologize in advance if this is obvious, or impossible, and I am profoundly ignorant of what I am trying to do…which I clearly am.

The simplest approach, in my opinion, is to use a set-type attribute to record all the topics, and then use Attribute Browser to review the results. You could also have various agents in an Outline view that would query your notes in various ways:


and so on.

In the image below, we have a set-type attribute $TopicType, and for each note I entered topics so that they overlapped categories. Attribute Browser figures this all out.

Here’s the example file.

Topics Example.tbx (55.8 KB)

Maybe just finish the assessment the way you are comfortable with, and after that is finished take the results and at your leisure build a Tinderbox project to parallel the results? You’ll also then have an opportunity to compare the two approaches side by side and see what works for you. Sometimes learning under duress is unproductive, while learning from prior art is very productive.

1 Like

Thanks so much for your helpful reply. There is a bit for a novice like me to unpack here, so I’ll have to get back with you later about how it works out. I really appreciate the file that you sent. I’ve always loved learning software, but I am usually much quicker on the uptake with it than I’ve been with Tinderbox.

I also appreciate your comments about my approach to this project. Basically everything is in DTPO, with which I have a long history and I’ve typically used it and Curio for these types of projects. I think what I’ll do is manage the project my “old-fashioned” way and take breaks from it by playing around with Tinderbox. I guess that makes the most sense.

Again, thank you.

1 Like

As an extension to the previous reply by @PaulWalters, my experience is that becoming comfortable with the attribute browser is the biggest pay-off single step you can take in feeling as if you can make Tinderbox do what you want.

Paul W’s illustration gives an idea of how you can see data displayed if you’ve added tags manually – for instance, putting Catfish, Gars, Mollusks in general, Zebra Mussels, Paddlefish, etc as values in a $TopicType attribute. You could also set things up to search the $Text of your notes for terms you’re interested in, and display the results the same way.

I find this kind of grouping and display to be my main, normal way of looking at info in Tinderbox. You’ll see some further threads discussing the details here: How to use the Attribute Browser and Finding attributes in the Attribute Browser , with links to other discussions.


I can’t seem to make $Text work in the same way I did with $TopicType. Could you (sorry to keep bothering you) tell me how to write it properly? All I really want to do (seems simple) is drag my notes in from DTPO, set $TopicType for the main topic of the note, and search all the notes that contains any text about some animal type and build a list of those notes. I can see the utility of the Attribute Browser for this, but I can’t seem to make the finding of the text in the document work.

1 Like

Jim, could you explain how you would do this? It’s not obvious to me, and I can’t find anything in the other AB threads about it. I see Robert Powell was wondering the same thing.

Thanks, as always, for your great posts.


Oops. As I was posting my question, it seems Paul Walters answered it. Would still be interested to know how you use this feature, if you are game to expound on it.


Wow, thank you very much. I would never have figured out that one has to put icontains after the $Text! How did you know that? Why isn’t just $Text sufficient for finding a string with additions to it for more complex operations? Perhaps I won’t live long enough (almost 68) to figure out this program.

1 Like

OK, as long as we’re all here, is there some way to save a list of these text searches in the attributes browser, to avoid having to refill the text for searching every time?

To save useful attribute browser settings, just leave them alone! Keep these settings in the current tab, and if you need a new attribute browser tab with different settings, just create a new tab.

(The next update will let you name different attribute browser tabs, too)

Thanks, I’ll go check that out.

How did you know that? Why isn’t just $Text sufficient for finding a string with additions to it for more complex operations?

a: Tinderbox Help is your friend.
b: So is aTbRef http://atbref.com
c: Tinderbox often provides different ways to do the same thing. That means two people might use different commands.
d: The difference between .contains and .icontains is that the latter tries to ignore whether the word has capital letters. That didn’t matter for your topics, which are all conventionally capitalized, but it might matter in plain text.

Hi, thanks for the info. I’ve spent hours in Tinderbox Help and TbRef and that helped with some earlier things I did (building prototype, setting up the various species in it, doing $TopicType), but I just couldn’t figure out what has been explained in this thread. I can’t tell you how much I appreciate all the help.

It takes a bit of practice, reading Help and aTbRef, and examining example Tinderbox files to get the hang of the query and action syntax. I strongly encourage experimenting too. Nothing beats it. You will not break your computer or shut down the government by playing with Tinderbox.

Generally, you might think about what’s going on here in this way:

I have this thing, $Text and I need to tell Tinderbox to do something with it. What I want Tinderbox to do is find a word or two (“strings”) in that text. In some computer languages, we might say “Find ‘fish’ in text”. Which is the same as saying “Text contains ‘fish’”. Which Tinderbox says can be shorted to $Text.contains(“fish”). The latter is just a shorthand way of telling Tinderbox “Find ‘fish’ in text”, and because in the long run shorthand commands are easier to remember and work with (and less prone to error), that’s how we got to where we use $Text.contains(“fish”).


One thing I have found helpful is to search for an example of the thing you want to accomplish (for example in TbRef), or something that is very like your thing, and then shamelessly lift the exact language from the example and plug it into your own doc. I’ve often found it more satisfying and enlightening to get something working and then understand the nuances later (why I needed icontains instead of contains, or quotes instead of no-quotes, or whatever).

Good luck!

1 Like

Hi, I tried that ,but never found anything that I could make work. I found $Text, for example, with other expressions included, but never ran across icontains. These are all great suggestions, thanks to all of you. I finally have the fundamentals set up for this.

.contains() and .icontains are each discussed in Tinderbox Help ▸ Queries and Actions ▸ String operators.

One minor thing. Mollusk (AmE) and Mollusc (BrE) appears to have two spellings. Depending on the sources you might need to allow for both in your queries. Whilst you could query

$Text.icontains("mollusc") | $Text.icontains("mollusk")

But you can also use a regular expression that matches both spelling variants:


Or, you could search for “mollus”, and live with the false positives for the Military Order of the Loyal Legion of the US and various people named Mollus.