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

if tests for the presence of a variable.
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
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.

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
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

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

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:

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