Alternate Reference prototypes for Bookends

I use Bookends as my bibliography manager, and the Tinderbox prototype support is a great convenience for most book and journal references. However, issues arise when I need to deal with edited volumes or a chapter within edited volume. Using the Reference Prototype set up for Bookends, for example, will not list the editors. So what I am looking for are prototypes that can deal with the way Bookends deals with “Editors” (not treated as Authors) or Edited Book Titles (which are in Volume under Edited Book Type).
Thanks in advance.

In short, this isn’t a prototype issue at heart. If you need Editor info in a discrete attribute you’ll need to make one: I suggest you make a user attribute ‘Editors’ of the set type (IOW akin to that for authors).

Then you need to use Stream processing on the reference notes $ReferenceRIS data to map every ‘ED’ tag value (there is one tag per discrete editor) to $Editors and the ‘VL’ tag to $Volume (or whatever system/user attribute you want).

Used up my available free time digging in the guts of Bookends and Tinderbox to check the above. If unsure how to proceed do ask and I’ll try and get to this later.

Note: if Bookends [sic] isn’t exporting data you need, i.e. it isn’t in Tinderbox’s $ReferenceRIS data, then you’ll need to get acquainted with Bookends’ Formats Manager. The latter is byzantine in complexity at first encounter but is actually perfectly logical if you don’t try and rush the homework.

I don’t think Bookends’ Formats Manager is that Byzantine!

Yes, there is a mistake in Tinderbox’s handling of multiple authors and editors in $ReferenceRIS. When $ReferenceRIS was set up, Tinderbox dictionaries couldn’t really handle this situation. Now they can.


It turns out that there probably isn’t a problem. I followed up with Jon @sonnysoftware who pointed out that the ED and T1 info shows up by using the RIS.FMT – which means I need to adjust the fmt I am using… Another related issue emerged, however, when there is more than one ED. At times one of the editors shows up under A3 using the RIS.FMT. Likely has to do with my input since problem is intermittent.

Thanks again,


PS: Follow up with Jon @sonnysoftware – turns out there was an issue with the TY = Edited Book that was generating the A3 issue. He is fixing the problem…

1 Like

Just to say a “+1” as Bookends support is awesome and Jon is a fount of knowledge. A good reason Bookends licence renewal is in the top part of my “will renew” stack; v14.1.9 just dropped.

My earlier reference to Bookends’s Formats Manager wasn’t meant to sound negative. A Reference manager is all about quality of input and output. Given the—frankly—lack of effort by format ‘owners’ in maintaining their formats for the post-paper age, I love Bookends’ ability to route around that abject failure by format owners/maintainers. My term ‘byzantine’ simply meant that Formats Manager has a scary number of options at first sight; not all folks are excited by having many unknown choices. But, a bit like Tinderbox, you don’t have to use every option/feature just because it is there. Use what you need—I was also reflecting that figuring out that ‘need’ can be intimidating the first time around the buoy.

OK, lets assume we’ve added a Set-type attribute ‘Editors’ and we want to populate it with the RIS data for editors. AS RIS uses one ‘ED’ tag per editor we want to parse through $ReferenceRIS and for every line starting 'ED" we want to add the line’s date to $Editors.

Now—at least in Bookends’s RIS, a tag/line starts with a 2-characters tag, 2 paces, a hyphen/minus, and another space, and then the data. As String.substr() uses a zero-based character count, the data in an RIS tag/paragraph starts at number 5 (i.e. the sixth character).

So to parse the editors from RIS you can use action code like this:

$Text.eachLine(aLine:aLine.beginsWith("ED  - ")){
   $Editors += aLine.substr(5);

FWIW, I did try using Stream parsing actions like .captureTo() but it just wasn’t clear if the attribute defined by targetAttributeStr was a List or Set that the passed value added to the existing value or completely replaced it.

Happily, there’s normally more than one way to do things and the above code has now such ambiguity. It reads each line (aka paragraph) of $ReferenceRIS and only if that line starts with the tag value ED does it add the tag’s value to $Editors. as $editors is a Set-type attribute, any dupes are automatically deleted.

†. testing using RIS created by dragging from Bookends v14.1.9 on macOS 12.6.4

‡. In the context of use, a single note ought not to have multiple $Editors values that are the same. As so much reference data is ingested to Reference Manger apps from supposedly trustworthy§ sources and never manually reviewed … mistakes can happen. (other) Humans make data entry errors—more than you’d assume, which bites if you don’t triage/clean your references in your RM app (Bookends is but one).

§. Sadly, the size/repute of the publisher is not a reliable measure in this context.

Hi Mark

Qq: Can you explain this part of the code above? The “aLine:aLine” part with the colon…I have not seen this before. I do not understand it. Is this specific to Bookends?

Thanks in advance,

1 Like

The syntax is here: Stream.eachLine(loopVar[:condition]){actions}. aLine is the user-defined loopVar loop variable.

Where are you getting stuck?

1 Like

ahh…I did not see the loopVariable:conditions part. It was the “:” that was throwing me. Got it now.

Thanks Mark

1 Like