6 use XML::LibXML::Reader;
7 use LWP::Simple qw($ua get);
10 # loc.gov blocks basic user agents now
11 $ua->agent('Evergreen/3.1');
18 my $content = get('http://www.loc.gov/marc/relators/relacode.html');
20 $content =~ s{^<!DOCTYPE.*?>}{}s;
21 $content =~ s{<head>.+?</head>}{}s;
22 $content =~ s{<table .+?<table }{<table }s;
23 $content =~ s{»}{}gs;
24 $content =~ s{</table>.+?</table>}{</table>}s;
26 my $reader = XML::LibXML::Reader->new(
32 $reader->nextElement('table');
33 $reader->nextElement('tr');
34 while($reader->read) {
38 #print Dumper(\%relator);
43 if ($reader->nodeType == XML_READER_TYPE_ELEMENT && $reader->name eq 'td') {
44 if ($reader->getAttribute('class') && $reader->getAttribute('class') eq 'code') {
50 if ($reader->nodeType == XML_READER_TYPE_TEXT) {
52 $code_v = $reader->value();
54 # Treat deprecated codes as valid
58 $relator{$code_v} = $reader->value();
64 sub generateRelatorMap {
67 # Generated from http://www.loc.gov/marc/relators/relacode.html
68 # using the build/tools/relator_map script
70 print 'relators = {' . "\n";
71 foreach (sort keys %relator) {
72 print " '$_' => l('$relator{$_}'),\n";