# Understanding Choose by variable

**URL:** <https://discourse.citationstyles.org/t/understanding-choose-by-variable/1152>\
**Category:** CSL Development\
**Created:** [January 22, 2013, 2:35pm UTC](https://discourse.citationstyles.org/t/understanding-choose-by-variable/1152 "2013-01-22T14:35:53Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![jda](https://avatars.discourse-cdn.com/v4/letter/j/91b2a8/32.png) [@jda](https://discourse.citationstyles.org/u/jda)\
**Post date:** [January 22, 2013, 2:35pm UTC](https://discourse.citationstyles.org/t/understanding-choose-by-variable/1152/1 "2013-01-22T14:35:53Z")

</div>

I’m toying with writing a CSL parser and have found this to be rather difficult. I’ve been able to deal with relatively simple styles, like JBC, but find the more complex ones baffling. For example, the Chicago styles. Here’s one macro from the Chicago Author-Date style:

Could someone translate the logic of this macro into English for me?

The \<if type= node is self-explanatory. However, what does mean? To me it would seem to mean

if type is a chapter or paper-conference

if an author is to be output

```
 substitute the editor

```

but that makes no sense. Also, what does mean?

I appreciate any explanation someone on the list can give.

Thanks,

Jon

---

<div class="post-metadata">

**Author:** ![Sebastian\_Karcher](https://yyz1.discourse-cdn.com/flex029/user_avatar/discourse.citationstyles.org/sebastian_karcher/32/176_2.png) [@Sebastian\_Karcher](https://discourse.citationstyles.org/u/Sebastian_Karcher)\
**Post date:** [January 22, 2013, 3:13pm UTC](https://discourse.citationstyles.org/t/understanding-choose-by-variable/1152/2 "2013-01-22T15:13:39Z")

</div>

if tests for the presence of a variable.  
[http://citationstyles.org/downloads/specification.html#choose](http://citationstyles.org/downloads/specification.html#choose)

So the above means:  
If an item is a chapter or a conference paper:  
if the item has an author  
print the editor here  
if the item has either and editor or an author (match=“any”)  
print the translator here

The purpose of this is that you don’t want the editor printed here if it  
has been used at the start of the citation.  
This could almost certainly be simplified/improved using substitute -  
[http://citationstyles.org/downloads/specification.html#substitute](http://citationstyles.org/downloads/specification.html#substitute)  
last time I looked at the style I didn’t have the time to check and fix  
that (and the functionality would be the same, it’s just cleaner with  
substitute) - so  
it might not be the best example. For a more typical use, see e.g. this,  
which prints the type of material - Web vs. Print - for MLA style:

In other words, if an item has either the variable DOI, or the variable  
URL, it’s considered a web source and the style puts “Web.” at the end of  
the citation, otherwise it’s considered print and the style puts “Print” at  
the end of the citation. (if you look at the style it tests for a range of  
other materials - film, audio recording, etc. - first. This is just to  
illustrate the idea.

Hope that helps.

---

<div class="post-metadata">

**Author:** ![Simon\_Hewitt](https://avatars.discourse-cdn.com/v4/letter/s/c67d28/32.png) [@Simon\_Hewitt](https://discourse.citationstyles.org/u/Simon_Hewitt)\
**Post date:** [January 22, 2013, 3:09pm UTC](https://discourse.citationstyles.org/t/understanding-choose-by-variable/1152/3 "2013-01-22T15:09:28Z")

</div>

I’m no expert but here is my reading:

It’s not a substitution as such but how to build the  
"secondary-contributors" macro - the author is not touched.

The “” means if currently dealing with an author (from  
where the macro is called) then add the editor to the list (of  
secondary-contributors)

The “” means if currently dealing  
with an author OR editor (from where the macro is called) then add the  
translator to the list (of secondary-contributors).

So when “secondary-contributors” is used with an author, it will then have  
his editor and translator (where present and in that order) to output.  
When “secondary-contributors” is used with an editor, it will have his  
translator (where present) to output.

Cheers  
Simon-----Original Message-----  
From: jda [mailto:@jda]  
Sent: 22 January 2013 14:36  
To: [xbiblio-devel@lists.sourceforge.net](mailto:xbiblio-devel@lists.sourceforge.net)  
Subject: [xbiblio-devel] Understanding Choose by variable

I’m toying with writing a CSL parser and have found this to be rather  
difficult. I’ve been able to deal with relatively simple styles, like JBC,  
but find the more complex ones baffling. For example, the Chicago styles.  
Here’s one macro from the Chicago Author-Date style:

Could someone translate the logic of this macro into English for me?

The \<if type= node is self-explanatory. However, what does mean? To me it would seem to mean

if type is a chapter or paper-conference

if an author is to be output

```
 substitute the editor

```

but that makes no sense. Also, what does mean?

I appreciate any explanation someone on the list can give.

Thanks,

## Jon

---

<div class="post-metadata">

**Author:** ![Sylvester\_Keil](https://avatars.discourse-cdn.com/v4/letter/s/85e7bf/32.png) [@Sylvester\_Keil](https://discourse.citationstyles.org/u/Sylvester_Keil)\
**Post date:** [January 22, 2013, 3:08pm UTC](https://discourse.citationstyles.org/t/understanding-choose-by-variable/1152/4 "2013-01-22T15:08:37Z")

</div>

Have you read the specification? It’s fairly straightforward:

[http://rst.projectfondue.com/api/v1/rst2html/?rst\_url=https://raw.github.com/citation-style-language/documentation/master/specification.txt&css\_url=http://citation-style-language.github.com/styles/css/screen.css&output\_type=html&callback=&document\_output=whole&highlight\_style=manni#choose](http://rst.projectfondue.com/api/v1/rst2html/?rst_url=https://raw.github.com/citation-style-language/documentation/master/specification.txt&css_url=http://citation-style-language.github.com/styles/css/screen.css&output_type=html&callback=&document_output=whole&highlight_style=manni#choose)

The variable condition ‘tests whether the default (long) forms of the given variables contain non-empty values’.

Basically, in a choose node you can have a number of conditional blocks (i.e., if, else-if, else nodes); each if/else-if node can define a number of conditions; each condition has a value (multiple values are possible too). When you parse the node, you can create a list of condition-types and values. For example:

yields the list: [‘variable’, ‘author’]

yields the list: [[‘variable’, ‘author’], [‘is-numeric’, ‘edition’]]  
 yields the list: [[‘variable’, ‘author’], [‘variable’, ‘editor’], [‘is-numeric’, ‘edition’]]

Additionally, each node can have a ‘match’ attribute which tells you how to combine the list of conditions (provided there is more than one condition).

So, to answer your question:

> 

This block evaluates to true if the your citation item contains either an author or an editor.

Here you can see how this is implemented in citeproc-ruby:

> <https://github.com/inukshuk/citeproc-ruby/blob/master/lib/citeproc/ruby/renderer/choose.rb#L38>

---

<div class="post-metadata">

**Author:** ![jda](https://avatars.discourse-cdn.com/v4/letter/j/91b2a8/32.png) [@jda](https://discourse.citationstyles.org/u/jda)\
**Post date:** [January 22, 2013, 3:46pm UTC](https://discourse.citationstyles.org/t/understanding-choose-by-variable/1152/5 "2013-01-22T15:46:04Z")

</div>

Thanks to all who answered my questions, it was very helpful indeed. What I didn’t understand (but do now) is that refers to the presence of information in that field in the reference metadata. So for example when outputting the title (or whatever) one might have to see if the reference metadata contains an editor.

And i think I see that what I was trying to is not possible. That was to convert the .csl instruction set into another, proprietary, style set (not .csl). But since the capabilities are not entirely congruent, I think that’s not going to be possible. Rather, the .csl itself would have to be used directly to render the styled reference. I’ll have to put some more thought into this…

Thanks again,

Jon
