[%
subjects = [
{
label => l('Subject: '),
xpath => '//*[@tag="600" or @tag="610" or @tag="611" or @tag="630" or @tag="650" or @tag="651"]'
}, {
label => l('Genre: '),
xpath => '//*[@tag="655"]|//*[@tag="659"]'
}, {
label => l('Topic Heading: '),
xpath => '//*[@tag="690"]'
}, {
label => l('Geographic Setting: '),
xpath => '//*[@tag="691"]'
}, {
label => l('Biographical Subject: '),
xpath => '//*[@tag="692"]'
}, {
label => l('Character Attributes: '),
xpath => '//*[@tag="693"]'
}, {
label => l('Setting: '),
xpath => '//*[@tag="698"]'
}, {
label => l('Time Period: '),
xpath => '//*[@tag="699"]'
}
];
BLOCK render_subject;
loc = CGI.param('loc') | uri;
xpath = xpath || '//*[starts-with(@tag,"6")]';
FOR node IN ctx.marc_xml.findnodes(xpath);
all_terms = [];
FOR subfield IN node.childNodes;
NEXT UNLESS subfield.nodeName == "subfield";
code = subfield.getAttribute('code');
NEXT UNLESS code.match('[a-z]');
IF code.match('[vxyz]'); " — "; END;
# at this point, we actually have a partial term to use.
single_term = subfield.textContent | html;
all_terms.push(subfield.textContent);
total_term = all_terms.join(" ").replace('\s+$', '') | uri;
'' _ single_term _ '';
END;
IF all_terms.size; "
"; END;
END;
END
%]
[% BLOCK render_all_subjects;
FOREACH subj IN subjects;
content = PROCESS render_subject(xpath=subj.xpath);
IF content.match('\S');
%]
[% subj.label %] | [% content %] |