libis-tools 0.9.9 → 0.9.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.travis.yml +4 -2
- data/README.md +19 -0
- data/lib/libis/tools.rb +1 -0
- data/lib/libis/tools/config_file.rb +1 -1
- data/lib/libis/tools/extend/kernel.rb +16 -0
- data/lib/libis/tools/metadata.rb +20 -0
- data/lib/libis/tools/metadata/dublin_core_record.rb +1 -1
- data/lib/libis/tools/metadata/{field_spec.rb → field_format.rb} +7 -7
- data/lib/libis/tools/metadata/fix_field.rb +6 -1
- data/lib/libis/tools/metadata/mapper.rb +80 -0
- data/lib/libis/tools/metadata/mappers/flandrica.rb +69 -0
- data/lib/libis/tools/metadata/mappers/kuleuven.rb +1702 -0
- data/lib/libis/tools/metadata/marc21_record.rb +5 -4
- data/lib/libis/tools/metadata/marc_record.rb +96 -37
- data/lib/libis/tools/metadata/parser/basic_parser.rb +118 -0
- data/lib/libis/tools/metadata/parser/dublin_core_parser.rb +36 -0
- data/lib/libis/tools/metadata/parser/marc21_parser.rb +206 -0
- data/lib/libis/tools/metadata/parser/marc_format_parser.rb +52 -0
- data/lib/libis/tools/metadata/parser/marc_rules.rb +35 -0
- data/lib/libis/tools/metadata/parser/marc_select_parser.rb +25 -0
- data/lib/libis/tools/metadata/parser/patch.rb +21 -0
- data/lib/libis/tools/metadata/parser/subfield_criteria_parser.rb +71 -0
- data/lib/libis/tools/metadata/parsers.rb +12 -0
- data/lib/libis/tools/metadata/var_field.rb +57 -47
- data/lib/libis/tools/parameter.rb +12 -2
- data/lib/libis/tools/version.rb +1 -1
- data/libis-tools.gemspec +4 -3
- data/spec/config_spec.rb +3 -1
- data/spec/data/MetadataMapping.xlsx +0 -0
- data/spec/metadata/8389207.marc +96 -0
- data/spec/metadata/dublin_core_parser_spec.rb +48 -0
- data/spec/metadata/marc21_parser_data.rb +382 -0
- data/spec/metadata/marc21_parser_spec.rb +67 -0
- data/spec/metadata/marc21_spec.rb +116 -0
- data/spec/metadata/metadata_mapper_spec.rb +23 -0
- data/spec/spec_helper.rb +13 -0
- data/test.rb +61 -0
- metadata +77 -7
- data/lib/libis/tools/dc_record.rb +0 -47
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b01ca03040ec809f70ec3d43df73b70f043da800
|
4
|
+
data.tar.gz: f114d4ad472bf6bdc15afc3838294c148db7faee
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0c761e895cc23ce58742d04d8d6d1788bf169d9d438683004e9f7eb0f190f85944fb1db2eb26a1fccf11a9db66017953d5ba6663e915f0c29d2c30937da8933e
|
7
|
+
data.tar.gz: 3c04c7eff20a8ab20393a50b8992e4763408da4819445be3f7821bca5bfe307d3188784951d3f44693a85081e04e077c82e0b9d02e1e4b8c8ef1b8cc1df34171
|
data/.travis.yml
CHANGED
@@ -1,11 +1,14 @@
|
|
1
1
|
language: ruby
|
2
2
|
cache: bundler
|
3
|
+
sudo: false
|
3
4
|
rvm:
|
4
5
|
- 1.9.3
|
5
6
|
- 2.1.0
|
6
7
|
- 2.2.0
|
7
8
|
- ruby-head
|
8
|
-
- jruby-
|
9
|
+
- jruby-1.7.20
|
10
|
+
- jruby-9.0.1.0
|
11
|
+
- jruby-head
|
9
12
|
jdk:
|
10
13
|
- openjdk7
|
11
14
|
- oraclejdk7
|
@@ -34,4 +37,3 @@ branches:
|
|
34
37
|
addons:
|
35
38
|
code_climate:
|
36
39
|
repo_token: f6978964f55e6543befb82373651365f8195677816af6ff40ad70c82f7f22f09
|
37
|
-
|
data/README.md
CHANGED
@@ -300,6 +300,25 @@ produces:
|
|
300
300
|
<email>harry.potter@hogwarts.edu</email>
|
301
301
|
<email>hpotter@JKRowling.com</email>
|
302
302
|
</patron>
|
303
|
+
|
304
|
+
## Metadata
|
305
|
+
|
306
|
+
This gem also provides some modules and classes that assist in working with metadata. There are classes that allow to
|
307
|
+
create and/or read metadata for MARC(21), Dublin Core and SharePoint. These classes all live in the
|
308
|
+
Libis::Tools::Metadata namespace.
|
309
|
+
|
310
|
+
### MARC
|
311
|
+
|
312
|
+
The classes Libis::Tools::Metadata::MarcRecord and it's child class Libis::Tools::Metadata::Marc21Record are mainly
|
313
|
+
built for reading MARC(21) records. Most of the class logic is in the base class MarcRecord, which is incomplete and
|
314
|
+
should be considered an abstract class. Marc21Record on the other hand only contains the logic to parse the XML data
|
315
|
+
into the internal structure. A MarcRecord is created by supplying it an XML node (from Nokogiri or
|
316
|
+
Libis::Tools::XmlDocument) that contains child nodes with the MARC data of a single record. The code will strip
|
317
|
+
namespaces from the input in order to greatly simplify working with the XML.
|
318
|
+
|
319
|
+
|
320
|
+
|
321
|
+
|
303
322
|
|
304
323
|
## Contributing
|
305
324
|
|
data/lib/libis/tools.rb
CHANGED
@@ -67,7 +67,7 @@ module Libis
|
|
67
67
|
yield file_or_hash if block_given?
|
68
68
|
file_or_hash
|
69
69
|
when String
|
70
|
-
return unless File.exist?(file_or_hash)
|
70
|
+
return {} unless File.exist?(file_or_hash)
|
71
71
|
yield File.absolute_path(file_or_hash) if block_given?
|
72
72
|
# noinspection RubyResolve
|
73
73
|
YAML.load(ERB.new(open(file_or_hash).read).result) rescue {}
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module Kernel
|
2
|
+
|
3
|
+
def extract_argstring_from(name, call_stack)
|
4
|
+
file, line_number = call_stack.first.match(/^(.+):(\d+)/).captures
|
5
|
+
line = File.readlines(file)[line_number.to_i - 1].strip
|
6
|
+
argstring = line[/#{name}\s*\(?(.+?)\)?\s*($|#|\[|\})/, 1]
|
7
|
+
raise "unable to extract name for #{name} from #{file} line #{line_number}:\n #{line}" unless argstring
|
8
|
+
argstring
|
9
|
+
end
|
10
|
+
|
11
|
+
def dputs(value)
|
12
|
+
name = extract_argstring_from :dputs, caller
|
13
|
+
puts "#{name} : '#{value}'"
|
14
|
+
end
|
15
|
+
|
16
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module Libis
|
2
|
+
module Tools
|
3
|
+
module Metadata
|
4
|
+
|
5
|
+
autoload :MarcRecord, 'libis/tools/metadata/marc_record'
|
6
|
+
autoload :Marc21Record, 'libis/tools/metadata/marc21_record'
|
7
|
+
autoload :DublinCoreRecord, 'libis/tools/metadata/dublin_core_record'
|
8
|
+
|
9
|
+
module Mappers
|
10
|
+
|
11
|
+
autoload :Kuleuven, 'libis/tools/metadata/mappers/kuleuven'
|
12
|
+
autoload :Flandrica, 'libis/tools/metadata/mappers/flandrica'
|
13
|
+
|
14
|
+
end
|
15
|
+
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
require_relative 'metadata/parsers'
|
@@ -42,6 +42,7 @@ module Libis
|
|
42
42
|
raise ArgumentError, "Invalid argument: #{doc.inspect}"
|
43
43
|
end
|
44
44
|
@document = xml_doc.document if xml_doc
|
45
|
+
raise ArgumentError, 'XML document not valid.' if self.invalid?
|
45
46
|
end
|
46
47
|
|
47
48
|
def all
|
@@ -52,7 +53,6 @@ module Libis
|
|
52
53
|
m = /^([\/.]*\/)?(dc(terms)?:)?(.*)/.match(path.to_s)
|
53
54
|
return [] unless m[4]
|
54
55
|
path = (m[1] || '') + ('dc:' || m[2]) + m[4]
|
55
|
-
raise ArgumentError, 'XML document not valid.' if self.invalid?
|
56
56
|
@document.xpath(path.to_s)
|
57
57
|
end
|
58
58
|
|
@@ -4,7 +4,7 @@ module Libis
|
|
4
4
|
module Tools
|
5
5
|
module Metadata
|
6
6
|
|
7
|
-
class
|
7
|
+
class FieldFormat
|
8
8
|
|
9
9
|
attr_accessor :parts
|
10
10
|
attr_accessor :prefix
|
@@ -25,8 +25,8 @@ module Libis
|
|
25
25
|
end
|
26
26
|
end
|
27
27
|
@join = options[:join] if options[:join]
|
28
|
-
@prefix =
|
29
|
-
@postfix =
|
28
|
+
@prefix = FieldFormat::from(options[:prefix]) if options[:prefix]
|
29
|
+
@postfix = FieldFormat::from(options[:postfix]) if options[:postfix]
|
30
30
|
self
|
31
31
|
end
|
32
32
|
|
@@ -40,21 +40,21 @@ module Libis
|
|
40
40
|
|
41
41
|
def [](*parts)
|
42
42
|
options = parts.last.is_a?(Hash) ? parts.pop : {}
|
43
|
-
|
43
|
+
add parts
|
44
44
|
x = options.delete(:parts)
|
45
45
|
add x if x
|
46
46
|
add_options options
|
47
47
|
end
|
48
48
|
|
49
49
|
def self.from(*h)
|
50
|
-
|
50
|
+
self.new(*h)
|
51
51
|
end
|
52
52
|
|
53
53
|
def to_s
|
54
54
|
@parts.delete_if { |x|
|
55
55
|
x.nil? or
|
56
56
|
(x.is_a? String and x.empty?) or
|
57
|
-
(x.is_a?
|
57
|
+
(x.is_a? Libis::Tools::Metadata::FieldFormat and x.to_s.empty?)
|
58
58
|
}
|
59
59
|
result = @parts.join(@join)
|
60
60
|
unless result.empty?
|
@@ -66,7 +66,7 @@ module Libis
|
|
66
66
|
def add(part)
|
67
67
|
case part
|
68
68
|
when Hash
|
69
|
-
@parts <<
|
69
|
+
@parts << Libis::Tools::Metadata::FieldFormat::from(part)
|
70
70
|
when Array
|
71
71
|
part.each { |x| add x }
|
72
72
|
else
|
@@ -7,13 +7,18 @@ module Libis
|
|
7
7
|
class FixField
|
8
8
|
|
9
9
|
attr_reader :tag
|
10
|
-
|
10
|
+
attr_accessor :datas
|
11
11
|
|
12
12
|
def initialize(tag, datas)
|
13
13
|
@tag = tag
|
14
14
|
@datas = datas || ''
|
15
15
|
end
|
16
16
|
|
17
|
+
def [](from = nil, to = nil)
|
18
|
+
return @datas unless from
|
19
|
+
to ? @datas[from..to] : @datas[from]
|
20
|
+
end
|
21
|
+
|
17
22
|
def dump
|
18
23
|
"#{@tag}:'#{@datas}'\n"
|
19
24
|
end
|
@@ -0,0 +1,80 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'simple_xlsx_reader'
|
4
|
+
require 'backports/rails/string'
|
5
|
+
|
6
|
+
require_relative 'parsers'
|
7
|
+
|
8
|
+
module Libis
|
9
|
+
module Tools
|
10
|
+
module Metadata
|
11
|
+
|
12
|
+
# noinspection RubyResolve
|
13
|
+
class Mapper
|
14
|
+
|
15
|
+
attr_reader :target_parser, :selection_parser, :format_parser
|
16
|
+
attr_reader :tables, :mapping
|
17
|
+
|
18
|
+
def initialize(selection_parser, target_parser, format_parser, config_xlsx)
|
19
|
+
@selection_parser = selection_parser
|
20
|
+
@target_parser = target_parser
|
21
|
+
@format_parser = format_parser
|
22
|
+
@mapping = []
|
23
|
+
@tables = {}
|
24
|
+
doc = SimpleXlsxReader.open(config_xlsx)
|
25
|
+
doc.sheets.each do |sheet|
|
26
|
+
if sheet.name == 'Mapping'
|
27
|
+
mapping = sheet_to_hash(sheet)
|
28
|
+
mapping.each do |rule|
|
29
|
+
@mapping << {
|
30
|
+
'Selection' => begin
|
31
|
+
selection_parser.parse(rule['Selection'])
|
32
|
+
rescue Parslet::ParseFailed => error
|
33
|
+
puts "Error parsing '#{rule['Selection']}'"
|
34
|
+
puts error.cause.ascii_tree
|
35
|
+
end,
|
36
|
+
'Target' => begin
|
37
|
+
target_parser.parse(rule['Target'])
|
38
|
+
rescue Parslet::ParseFailed => error
|
39
|
+
puts "Error parsing '#{rule['Target']}'"
|
40
|
+
puts error.cause.ascii_tree
|
41
|
+
end,
|
42
|
+
'Format' => begin
|
43
|
+
format_parser.parse(rule['Format'])
|
44
|
+
rescue Parslet::ParseFailed => error
|
45
|
+
puts "Error parsing '#{rule['Format']}'"
|
46
|
+
puts error.cause.ascii_tree
|
47
|
+
end,
|
48
|
+
}
|
49
|
+
end
|
50
|
+
else
|
51
|
+
@tables[sheet.name] = sheet_to_hash(sheet)
|
52
|
+
end
|
53
|
+
end
|
54
|
+
if @mapping.empty?
|
55
|
+
raise RuntimeError, "Failure: config file '#{config_xlsx}' does not contain a 'Mapping' sheet."
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
private
|
60
|
+
|
61
|
+
def sheet_to_hash(sheet)
|
62
|
+
data = sheet.rows
|
63
|
+
header = data.shift
|
64
|
+
result = []
|
65
|
+
data.each do |row|
|
66
|
+
x = {}
|
67
|
+
header.each_with_index { |col_name, col_index| x[col_name] = row[col_index] }
|
68
|
+
result << x
|
69
|
+
end
|
70
|
+
result
|
71
|
+
end
|
72
|
+
|
73
|
+
def lookup(table, key, constraints = {})
|
74
|
+
@tables[table].select { |value| constraints.map { |k, v| value[k] == v }.all? }.map { |v| v[key] }
|
75
|
+
end
|
76
|
+
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
@@ -0,0 +1,69 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'libis/tools/metadata/mappers/kuleuven'
|
4
|
+
|
5
|
+
module Libis
|
6
|
+
module Tools
|
7
|
+
module Metadata
|
8
|
+
module Mappers
|
9
|
+
|
10
|
+
# noinspection RubyResolve
|
11
|
+
module Flandrica
|
12
|
+
include Libis::Tools::Metadata::Mappers::Kuleuven
|
13
|
+
|
14
|
+
def marc2dc_identifier(xml)
|
15
|
+
Libis::Tools::Metadata::Mappers::Kuleuven.marc2dc_identifier(xml)
|
16
|
+
marc2dc_identifier_040(xml)
|
17
|
+
end
|
18
|
+
|
19
|
+
def marc2dc_identifier_001(xml)
|
20
|
+
# "urn:ControlNumber:" [MARC 001]
|
21
|
+
tag('001').each { |t|
|
22
|
+
xml['dc'].identifier element(t.datas, prefix: '')
|
23
|
+
}
|
24
|
+
end
|
25
|
+
|
26
|
+
def marc2dc_identifier_040(xml)
|
27
|
+
# [MARC 040 $a]
|
28
|
+
tag('040', 'a').each { |t|
|
29
|
+
xml['dc'].identifier('xsi:type' => 'dcterms:URI').text t._a
|
30
|
+
}
|
31
|
+
end
|
32
|
+
|
33
|
+
def marc2dc_alternative_240_a(xml)
|
34
|
+
# [MARC 240 #_ $a] ", " [MARC 240 #_ $f] ", " [MARC 240 #_ $g] ", "
|
35
|
+
tag('240#_', 'a f g').each { |t|
|
36
|
+
xml['dcterms'].alternative element(t._afg, join: ', ', postfix: ', ')
|
37
|
+
}
|
38
|
+
end
|
39
|
+
|
40
|
+
def marc2dc_alternative_240_l(xml)
|
41
|
+
# [MARC 240 #_ $l] ", " [MARC 240 #_ $m] ", " [MARC 240 #_ $n] ", " [MARC 240 #_ $o] ", " [MARC 240 #_ $p] ", " [MARC 240 #_ $r] ", " [MARC 240 #_ $s]
|
42
|
+
tag('240#_', 'l m n o p r s').each { |t|
|
43
|
+
xml['dcterms'].alternative element(t._lmnoprs, join: ', ')
|
44
|
+
}
|
45
|
+
end
|
46
|
+
|
47
|
+
def marc2dc_source_856(xml)
|
48
|
+
marc2dc_source_856__1(xml)
|
49
|
+
marc2dc_source_856__2(xml)
|
50
|
+
marc2dc_source_856___(xml)
|
51
|
+
end
|
52
|
+
|
53
|
+
def marc2dc_source_856___(xml)
|
54
|
+
# [MARC 856 ## $a]
|
55
|
+
tag('856', 'a').each { |t|
|
56
|
+
xml['dc'].source('xsi:type' => 'dcterms:URI').text element(t._a)
|
57
|
+
}
|
58
|
+
end
|
59
|
+
|
60
|
+
def check_name(_,_)
|
61
|
+
true
|
62
|
+
end
|
63
|
+
|
64
|
+
end
|
65
|
+
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
@@ -0,0 +1,1702 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'libis/tools/metadata/marc_record'
|
4
|
+
require 'libis/tools/metadata/dublin_core_record'
|
5
|
+
require 'libis/tools/assert'
|
6
|
+
|
7
|
+
module Libis
|
8
|
+
module Tools
|
9
|
+
module Metadata
|
10
|
+
module Mappers
|
11
|
+
|
12
|
+
# noinspection RubyResolve
|
13
|
+
module Kuleuven
|
14
|
+
|
15
|
+
def to_dc(label = nil)
|
16
|
+
assert(self.is_a? Libis::Tools::Metadata::MarcRecord)
|
17
|
+
|
18
|
+
doc = Libis::Tools::Metadata::DublinCoreRecord.new do |xml|
|
19
|
+
marc2dc_identifier(xml, label)
|
20
|
+
marc2dc_title(xml)
|
21
|
+
marc2dc_ispartof(xml)
|
22
|
+
marc2dc_alternative(xml)
|
23
|
+
marc2dc_creator(xml)
|
24
|
+
marc2dc_subject(xml)
|
25
|
+
marc2dc_temporal(xml)
|
26
|
+
marc2dc_description(xml)
|
27
|
+
marc2dc_isversionof(xml)
|
28
|
+
marc2dc_abstract(xml)
|
29
|
+
marc2dc_tableofcontents(xml)
|
30
|
+
marc2dc_available(xml)
|
31
|
+
marc2dc_haspart(xml)
|
32
|
+
marc2dc_contributor(xml)
|
33
|
+
marc2dc_provenance(xml)
|
34
|
+
marc2dc_publisher(xml)
|
35
|
+
marc2dc_date(xml)
|
36
|
+
marc2dc_type(xml)
|
37
|
+
marc2dc_spatial(xml)
|
38
|
+
marc2dc_extent(xml)
|
39
|
+
marc2dc_accrualperiodicity(xml)
|
40
|
+
marc2dc_format(xml)
|
41
|
+
marc2dc_medium(xml)
|
42
|
+
marc2dc_relation(xml)
|
43
|
+
marc2dc_replaces(xml)
|
44
|
+
marc2dc_hasversion(xml)
|
45
|
+
marc2dc_source(xml)
|
46
|
+
marc2dc_language(xml)
|
47
|
+
marc2dc_rightsholder(xml)
|
48
|
+
marc2dc_references(xml)
|
49
|
+
marc2dc_isreferencedby(xml)
|
50
|
+
|
51
|
+
end
|
52
|
+
|
53
|
+
# deduplicate the XML
|
54
|
+
found = Set.new
|
55
|
+
doc.root.children.each { |node| node.unlink unless found.add?(node.to_xml) }
|
56
|
+
|
57
|
+
doc
|
58
|
+
|
59
|
+
end
|
60
|
+
|
61
|
+
protected
|
62
|
+
|
63
|
+
def marc2dc_identifier(xml, label = nil)
|
64
|
+
# DC:IDENTIFIER
|
65
|
+
marc2dc_identifier_label(label, xml)
|
66
|
+
marc2dc_identifier_001(xml)
|
67
|
+
marc2dc_identifier_035(xml)
|
68
|
+
marc2dc_identifier_024_8(xml)
|
69
|
+
marc2dc_identifier_028_4(xml)
|
70
|
+
marc2dc_identifier_028_5(xml)
|
71
|
+
marc2dc_identifier_029(xml)
|
72
|
+
marc2dc_identifier_700(xml)
|
73
|
+
marc2dc_identifier_710(xml)
|
74
|
+
marc2dc_identifier_752(xml)
|
75
|
+
marc2dc_identifier_020(xml)
|
76
|
+
marc2dc_identifier_020_9(xml)
|
77
|
+
marc2dc_identifier_022(xml)
|
78
|
+
marc2dc_identifier_024_2(xml)
|
79
|
+
marc2dc_identifier_024_3(xml)
|
80
|
+
marc2dc_identifier_690(xml)
|
81
|
+
marc2dc_identifier_856(xml)
|
82
|
+
end
|
83
|
+
|
84
|
+
def marc2dc_identifier_label(label, xml)
|
85
|
+
# noinspection RubyResolve
|
86
|
+
xml['dc'].identifier label if label
|
87
|
+
end
|
88
|
+
|
89
|
+
def marc2dc_identifier_001(xml)
|
90
|
+
# "urn:ControlNumber:" [MARC 001]
|
91
|
+
all_tags('001') { |t|
|
92
|
+
xml['dc'].identifier element(t.datas, prefix: 'urn:ControlNumber:')
|
93
|
+
}
|
94
|
+
end
|
95
|
+
|
96
|
+
def marc2dc_identifier_035(xml)
|
97
|
+
# [MARC 035__ $a]
|
98
|
+
each_field('035__', 'a') { |f| xml['dc'].identifier f }
|
99
|
+
end
|
100
|
+
|
101
|
+
def marc2dc_identifier_024_8(xml)
|
102
|
+
# [MARC 24 8_ $a]
|
103
|
+
each_field('0248_', 'a') { |f| xml['dc'].identifier f }
|
104
|
+
end
|
105
|
+
|
106
|
+
def marc2dc_identifier_028_4(xml)
|
107
|
+
# [MARC 28 40 $b]": "[MARC 28 40 $a]
|
108
|
+
all_tags('02840') { |t|
|
109
|
+
xml['dc'].identifier element(t._ba, join: ': ')
|
110
|
+
}
|
111
|
+
end
|
112
|
+
|
113
|
+
def marc2dc_identifier_028_5(xml)
|
114
|
+
# [MARC 28 50 $b]": "[MARC 28 50 $a]
|
115
|
+
all_tags('02850') { |t|
|
116
|
+
xml['dc'].identifier element(t._ba, join: ': ')
|
117
|
+
}
|
118
|
+
end
|
119
|
+
|
120
|
+
def marc2dc_identifier_029(xml)
|
121
|
+
# "Siglum: " [MARC 029 __ $a]
|
122
|
+
each_field('029__', 'a') { |f| xml['dc'].identifier element(f, prefix: 'Siglum: ') }
|
123
|
+
end
|
124
|
+
|
125
|
+
def marc2dc_identifier_700(xml)
|
126
|
+
# [MARC 700 #_ $0]
|
127
|
+
each_field('700#_', '0') { |f| xml['dc'].identifier f }
|
128
|
+
end
|
129
|
+
|
130
|
+
def marc2dc_identifier_710(xml)
|
131
|
+
# [MARC 710 #_ $0]
|
132
|
+
each_field('710#_', '0') { |f| xml['dc'].identifier f }
|
133
|
+
end
|
134
|
+
|
135
|
+
def marc2dc_identifier_752(xml)
|
136
|
+
# [MARC 752 __ $0]
|
137
|
+
each_field('752#_', '0') { |f| xml['dc'].identifier f }
|
138
|
+
end
|
139
|
+
|
140
|
+
def marc2dc_identifier_020(xml)
|
141
|
+
# "urn:ISBN:"[MARC 020 __ $a]
|
142
|
+
each_field('020__', 'a') { |f|
|
143
|
+
xml['dc'].identifier('xsi:type' => 'dcterms:URI').text element(f, prefix: 'urn:ISBN:')
|
144
|
+
}
|
145
|
+
end
|
146
|
+
|
147
|
+
def marc2dc_identifier_020_9(xml)
|
148
|
+
# "urn:ISBN:"[MARC 020 9_ $a]
|
149
|
+
each_field('0209_', 'a') { |f|
|
150
|
+
xml['dc'].identifier('xsi:type' => 'dcterms:URI').text element(f, prefix: 'urn:ISBN:')
|
151
|
+
}
|
152
|
+
end
|
153
|
+
|
154
|
+
def marc2dc_identifier_022(xml)
|
155
|
+
# "urn:ISSN:"[MARC 022 __ $a]
|
156
|
+
each_field('022__', 'a') { |f|
|
157
|
+
xml['dc'].identifier('xsi:type' => 'dcterms:URI').text element(f, prefix: 'urn:ISSN:')
|
158
|
+
}
|
159
|
+
end
|
160
|
+
|
161
|
+
def marc2dc_identifier_024_2(xml)
|
162
|
+
# "urn:ISMN:"[MARC 024 2_ $a]
|
163
|
+
each_field('0242_', 'a') { |f|
|
164
|
+
xml['dc'].identifier('xsi:type' => 'dcterms:URI').text element(f, prefix: 'urn:ISMN:')
|
165
|
+
}
|
166
|
+
end
|
167
|
+
|
168
|
+
def marc2dc_identifier_024_3(xml)
|
169
|
+
# "urn:EAN:"[MARC 024 3_ $a]
|
170
|
+
each_field('0243_', 'a') { |f|
|
171
|
+
xml['dc'].identifier('xsi:type' => 'dcterms:URI').text element(f, prefix: 'urn:EAN:')
|
172
|
+
}
|
173
|
+
end
|
174
|
+
|
175
|
+
def marc2dc_identifier_690(xml)
|
176
|
+
# [MARC 690 02 $0]
|
177
|
+
all_tags('69002', '0a') { |t|
|
178
|
+
if t._0 =~ /^\(ODIS-(PS|ORG)\)(\d)+$/
|
179
|
+
xml['dc'].identifier('xsi:type' => 'dcterms:URI').text odis_link($1, $2, CGI::escape(t._a))
|
180
|
+
else
|
181
|
+
xml['dc'].identifier t._a
|
182
|
+
end
|
183
|
+
}
|
184
|
+
end
|
185
|
+
|
186
|
+
def marc2dc_identifier_856(xml)
|
187
|
+
# [MARC 856 _2 $u]
|
188
|
+
all_tags('856_2', 'uy') { |t|
|
189
|
+
xml['dc'].identifier('xsi:type' => 'dcterms:URI').text element(t._u, CGI::escape(t._y), join: '#')
|
190
|
+
}
|
191
|
+
end
|
192
|
+
|
193
|
+
def marc2dc_title(xml)
|
194
|
+
# DC:TITLE
|
195
|
+
marc2dc_title_245(xml)
|
196
|
+
marc2dc_title_246(xml)
|
197
|
+
end
|
198
|
+
|
199
|
+
def marc2dc_title_245(xml)
|
200
|
+
marc2dc_title_245_0(xml)
|
201
|
+
marc2dc_title_245_1(xml)
|
202
|
+
end
|
203
|
+
|
204
|
+
def marc2dc_title_245_0(xml)
|
205
|
+
# [MARC 245 0# $a] " " [MARC 245 0# $b] " [" [MARC 245 0# $h] "]"
|
206
|
+
all_tags('2450#', 'a b h') { |t|
|
207
|
+
xml['dc'].title list_s(t._ab, opt_s(t._h))
|
208
|
+
}
|
209
|
+
end
|
210
|
+
|
211
|
+
def marc2dc_title_245_1(xml)
|
212
|
+
# [MARC 245 1# $a] " " [MARC 245 1# $b] " [" [MARC 245 1# $h] "]"
|
213
|
+
all_tags('2451#', 'a b h') { |t|
|
214
|
+
xml['dc'].title element(t._ab, opt_s(t._h), join: ' ')
|
215
|
+
}
|
216
|
+
end
|
217
|
+
|
218
|
+
def marc2dc_title_246(xml)
|
219
|
+
# [MARC 246 11 $a] " : " [MARC 246 11 $b]
|
220
|
+
all_tags('24611', 'a b') { |t|
|
221
|
+
xml['dc'].title element(t._ab, join: ' : ')
|
222
|
+
}
|
223
|
+
end
|
224
|
+
|
225
|
+
def marc2dc_ispartof(xml)
|
226
|
+
# DCTERMS:ISPARTOF
|
227
|
+
marc2dc_ispartof_243(xml)
|
228
|
+
marc2dc_ispartof_440(xml)
|
229
|
+
marc2dc_ispartof_lkr(xml)
|
230
|
+
marc2dc_ispartof_773(xml)
|
231
|
+
end
|
232
|
+
|
233
|
+
def marc2dc_ispartof_243(xml)
|
234
|
+
# [MARC 243 1# $a]
|
235
|
+
each_field('2431#', 'a') { |f| xml['dcterms'].isPartOf f }
|
236
|
+
end
|
237
|
+
|
238
|
+
def marc2dc_ispartof_440(xml)
|
239
|
+
# [MARC 440 _# $a] " : " [MARC 440 _# $b] " , " [MARC 440 _# $v]
|
240
|
+
all_tags('440_#', 'a b v') { |t|
|
241
|
+
xml['dcterms'].isPartOf element({parts: t._ab, join: ' : '}, t._v, join: ' , ')
|
242
|
+
}
|
243
|
+
end
|
244
|
+
|
245
|
+
def marc2dc_ispartof_lkr(xml)
|
246
|
+
# [MARC LKR $n]
|
247
|
+
each_field('LKR', 'n') { |f| xml['dcterms'].isPartOf f }
|
248
|
+
end
|
249
|
+
|
250
|
+
def marc2dc_ispartof_773(xml)
|
251
|
+
# [MARC 773 0_ $a] " (" [MARC 773 0_ $g*]")"
|
252
|
+
all_tags('7730_', 'a') { |t|
|
253
|
+
xml['dcterms'].isPartOf element(t._a, opt_r(repeat(t.a_g)), join: ' ')
|
254
|
+
}
|
255
|
+
end
|
256
|
+
|
257
|
+
def marc2dc_alternative(xml)
|
258
|
+
# DCTERMS:ALTERNATIVE
|
259
|
+
marc2dc_alternative_130(xml)
|
260
|
+
marc2dc_alternative_240(xml)
|
261
|
+
marc2dc_alternative_242(xml)
|
262
|
+
marc2dc_alternative_246(xml)
|
263
|
+
marc2dc_alternative_210(xml)
|
264
|
+
end
|
265
|
+
|
266
|
+
def marc2dc_alternative_130(xml)
|
267
|
+
marc2dc_alternative_130_a(xml)
|
268
|
+
marc2dc_alternative_130_l(xml)
|
269
|
+
end
|
270
|
+
|
271
|
+
def marc2dc_alternative_130_a(xml)
|
272
|
+
# [MARC 130 #_ $a] ", " [MARC 130 #_ $f] ", " [MARC 130 #_ $g] ", "
|
273
|
+
all_tags('130#_', 'a f g') { |t|
|
274
|
+
xml['dcterms'].alternative element(t._afg, join: ', ', postfix: ', ')
|
275
|
+
}
|
276
|
+
end
|
277
|
+
|
278
|
+
def marc2dc_alternative_130_l(xml)
|
279
|
+
# [MARC 130 #_ $l] ", " [MARC 130 #_ $m] ", " [MARC 130 #_ $n] ", " [MARC 130 #_ $o] ", " [MARC 130 #_ $p] ", " [MARC 130 #_ $r] ", " [MARC 130 #_ $s]
|
280
|
+
all_tags('130#_', 'l m n o p r s') { |t|
|
281
|
+
xml['dcterms'].alternative element(t._lmnoprs, join: ', ')
|
282
|
+
}
|
283
|
+
end
|
284
|
+
|
285
|
+
def marc2dc_alternative_240(xml)
|
286
|
+
marc2dc_alternative_240_a(xml)
|
287
|
+
marc2dc_alternative_240_l(xml)
|
288
|
+
end
|
289
|
+
|
290
|
+
def marc2dc_alternative_240_a(xml)
|
291
|
+
# [MARC 240 1# $a] ", " [MARC 240 1# $f] ", " [MARC 240 1# $g] ", "
|
292
|
+
all_tags('2401#', 'a f g') { |t|
|
293
|
+
xml['dcterms'].alternative element(t._afg, join: ', ', postfix: ', ')
|
294
|
+
}
|
295
|
+
end
|
296
|
+
|
297
|
+
def marc2dc_alternative_240_l(xml)
|
298
|
+
# [MARC 240 1# $l] ", " [MARC 240 1# $m] ", " [MARC 240 1# $n] ", " [MARC 240 1# $o] ", " [MARC 240 1# $p] ", " [MARC 240 1# $r] ", " [MARC 240 1# $s]
|
299
|
+
all_tags('2401#', 'l m n o p r s') { |t|
|
300
|
+
xml['dcterms'].alternative element(t._lmnoprs, join: ', ')
|
301
|
+
}
|
302
|
+
end
|
303
|
+
|
304
|
+
def marc2dc_alternative_242(xml)
|
305
|
+
# [MARC 242 1# $a] ". " [MARC 242 1# $b]
|
306
|
+
all_tags('2421#', 'a b') { |t|
|
307
|
+
xml['dcterms'].alternative element(t._ab, join: '. ')
|
308
|
+
}
|
309
|
+
end
|
310
|
+
|
311
|
+
def marc2dc_alternative_246(xml)
|
312
|
+
marc2dc_alternative_246_13(xml)
|
313
|
+
marc2dc_alternative_246_19(xml)
|
314
|
+
end
|
315
|
+
|
316
|
+
def marc2dc_alternative_246_13(xml)
|
317
|
+
# [MARC 246 13 $a] ". " [MARC 246 13 $b]
|
318
|
+
all_tags('24613', 'a b') { |t|
|
319
|
+
xml['dcterms'].alternative element(t._ab, join: '. ')
|
320
|
+
}
|
321
|
+
end
|
322
|
+
|
323
|
+
def marc2dc_alternative_246_19(xml)
|
324
|
+
# [MARC 246 19 $a] ". " [MARC 246 19 $b]
|
325
|
+
all_tags('24619', 'a b') { |t|
|
326
|
+
xml['dcterms'].alternative element(t._ab, join: '. ')
|
327
|
+
}
|
328
|
+
end
|
329
|
+
|
330
|
+
def marc2dc_alternative_210(xml)
|
331
|
+
# [MARC 210 10 $a]
|
332
|
+
each_field('21010', 'a') { |f| xml['dcterms'].alternative f }
|
333
|
+
end
|
334
|
+
|
335
|
+
def marc2dc_creator(xml)
|
336
|
+
# DC:CREATOR
|
337
|
+
marc2dc_creator_100(xml)
|
338
|
+
marc2dc_creator_700(xml)
|
339
|
+
marc2dc_creator_710(xml)
|
340
|
+
marc2dc_creator_711(xml)
|
341
|
+
end
|
342
|
+
|
343
|
+
def marc2dc_creator_100(xml)
|
344
|
+
marc2dc_creator_100_0(xml)
|
345
|
+
marc2dc_creator_100_1(xml)
|
346
|
+
end
|
347
|
+
|
348
|
+
def marc2dc_creator_100_0(xml)
|
349
|
+
# [MARC 100 0_ $a] " " [MARC 100 0_ $b] " ("[MARC 100 0_ $c] ") " "("[MARC 100 0_ $d]") ("[MARC 100 0_ $g] "), " [MARC 100 0_ $4]" (" [MARC 100 0_ $9]")"
|
350
|
+
all_tags('1000_', '4') { |t|
|
351
|
+
next unless check_name(t, :creator)
|
352
|
+
xml['dc'].creator element(list_s(t._ab, opt_r(t._c), opt_r(t._d), opt_r(t._g)),
|
353
|
+
list_s(full_name(t), opt_r(t._9)),
|
354
|
+
join: ', ')
|
355
|
+
}
|
356
|
+
end
|
357
|
+
|
358
|
+
def marc2dc_creator_100_1(xml)
|
359
|
+
# [MARC 100 1_ $a] " " [MARC 100 1_ $b] " ("[MARC 100 1_ $c] ") " "("[MARC 100 1_ $d]") ("[MARC 100 1_ $g]"), " [MARC 100 1_ $4]" ("[MARC 100 1_ $e]") (" [MARC 100 1_ $9]")"
|
360
|
+
all_tags('1001_', 'a b c d g e 9') { |t|
|
361
|
+
next unless check_name(t, :creator)
|
362
|
+
xml['dc'].creator element(list_s(t._ab, opt_r(t._c), opt_r(t._d), opt_r(t._g)),
|
363
|
+
list_s(full_name(t), opt_r(t._e), opt_r(t._9)),
|
364
|
+
join: ', ')
|
365
|
+
}
|
366
|
+
end
|
367
|
+
|
368
|
+
def marc2dc_creator_700(xml)
|
369
|
+
marc2dc_creator_700_0(xml)
|
370
|
+
marc2dc_creator_700_1(xml)
|
371
|
+
end
|
372
|
+
|
373
|
+
def marc2dc_creator_700_0(xml)
|
374
|
+
# [MARC 700 0_ $a] ", " [MARC 700 0_ $b] ", " [MARC 700 0_ $c] ", " [MARC 700 0_ $d] ", " [MARC 700 0_ $g] " (" [MARC 700 0_ $4] "), " [MARC 700 0_ $e]
|
375
|
+
all_tags('7000_', 'g c d e') { |t|
|
376
|
+
next unless check_name(t, :creator)
|
377
|
+
xml['dc'].creator element(t._abcd,
|
378
|
+
list_s(t._g, opt_r(full_name(t))),
|
379
|
+
t._e,
|
380
|
+
join: ', ')
|
381
|
+
}
|
382
|
+
end
|
383
|
+
|
384
|
+
def marc2dc_creator_700_1(xml)
|
385
|
+
# [MARC 700 1_ $a] ", " [MARC 700 1_ $b] ", " [MARC 700 1_ $c] ", " [MARC 700 1_ $d] ", " [MARC 700 1_ $g] " ( " [MARC 700 1_ $4] "), " [MARC 700 1_ $e]
|
386
|
+
all_tags('7001_', 'a b c d g e') { |t|
|
387
|
+
next unless check_name(t, :creator)
|
388
|
+
xml['dc'].creator element(t._abcd,
|
389
|
+
list_s(t._g, opt_r(full_name(t))),
|
390
|
+
t._e,
|
391
|
+
join: ', ')
|
392
|
+
}
|
393
|
+
end
|
394
|
+
|
395
|
+
def marc2dc_creator_710(xml)
|
396
|
+
marc2dc_creator_710_29(xml)
|
397
|
+
marc2dc_creator_710_2_(xml)
|
398
|
+
end
|
399
|
+
|
400
|
+
def marc2dc_creator_710_29(xml)
|
401
|
+
# [MARC 710 29 $a] "," [MARC 710 29 $g]" (" [MARC 710 29 $4] "), " [MARC 710 29 $e]
|
402
|
+
all_tags('71029', 'a g e') { |t|
|
403
|
+
next unless check_name(t, :creator)
|
404
|
+
xml['dc'].creator element(t._a,
|
405
|
+
list_s(t._g, opt_r(full_name(t))),
|
406
|
+
t._e,
|
407
|
+
join: ', ')
|
408
|
+
}
|
409
|
+
end
|
410
|
+
|
411
|
+
def marc2dc_creator_710_2_(xml)
|
412
|
+
# [MARC 710 2_ $a] " (" [MARC 710 2_ $g] "), " [MARC 710 2_ $4] " (" [MARC 710 2_ $9*] ") ("[MARC 710 2_ $e]")"
|
413
|
+
all_tags('7102_', 'a g e') { |t|
|
414
|
+
next unless check_name(t, :creator)
|
415
|
+
xml['dc'].creator element(list_s(t._a, opt_r(t._g)),
|
416
|
+
list_s(full_name(t), opt_r(repeat(t.a_9)), opt_r(t._e)),
|
417
|
+
join: ', ')
|
418
|
+
}
|
419
|
+
end
|
420
|
+
|
421
|
+
def marc2dc_creator_711(xml)
|
422
|
+
# [MARC 711 2_ $a] ", "[MARC 711 2_ $n] ", " [MARC 711 2_ $c] ", " [MARC 711 2_ $d] " (" [MARC 711 2_ $g] ")"
|
423
|
+
all_tags('7112_', 'a n c d g') { |t|
|
424
|
+
next unless check_name(t, :creator)
|
425
|
+
xml['dc'].creator element(t._ancd, join: ', ', postfix: opt_r(t._g, prefix: ' '))
|
426
|
+
}
|
427
|
+
end
|
428
|
+
|
429
|
+
def marc2dc_subject(xml)
|
430
|
+
# DC:SUBJECT
|
431
|
+
marc2dc_subject_600(xml)
|
432
|
+
marc2dc_subject_610(xml)
|
433
|
+
marc2dc_subject_611(xml)
|
434
|
+
marc2dc_subject_630(xml)
|
435
|
+
marc2dc_subject_650_x0(xml)
|
436
|
+
marc2dc_subject_650_x2(xml)
|
437
|
+
marc2dc_subject_691(xml)
|
438
|
+
marc2dc_subject_082(xml)
|
439
|
+
marc2dc_subject_690(xml)
|
440
|
+
end
|
441
|
+
|
442
|
+
def marc2dc_subject_600(xml)
|
443
|
+
# [MARC 600 #0 $a] " " [MARC 600 #0 $b] " " [MARC 600 #0 $c] " " [MARC 600 #0 $d] " " [MARC 600 #0 $g]
|
444
|
+
all_tags('600#0', 'a b c d g') { |t|
|
445
|
+
xml['dc'].subject('xsi:type' => 'http://purl.org/dc/terms/LCSH').text list_s(t._abcdg)
|
446
|
+
}
|
447
|
+
end
|
448
|
+
|
449
|
+
def marc2dc_subject_610(xml)
|
450
|
+
# [MARC 610 #0 $a] " " [MARC 610 #0 $c] " " [MARC 610 #0 $d] " " [MARC 610 #0 $g]
|
451
|
+
all_tags('610#0', 'a c d g') { |t|
|
452
|
+
xml['dc'].subject('xsi:type' => 'http://purl.org/dc/terms/LCSH').text list_s(t._acdg)
|
453
|
+
}
|
454
|
+
end
|
455
|
+
|
456
|
+
def marc2dc_subject_611(xml)
|
457
|
+
# [MARC 611 #0 $a] " " [MARC 611 #0 $c] " " [MARC 611 #0 $d] " " [MARC 611 #0 $g] " " [MARC 611 #0 $n]
|
458
|
+
all_tags('611#0', 'a c d g n') { |t|
|
459
|
+
xml['dc'].subject('xsi:type' => 'http://purl.org/dc/terms/LCSH').text list_s(t._acdgn)
|
460
|
+
}
|
461
|
+
end
|
462
|
+
|
463
|
+
def marc2dc_subject_630(xml)
|
464
|
+
# [MARC 630 #0 $a] " " [MARC 630 #0 $f] " " [MARC 630 #0 $g] " " [MARC 630 #0 $l] " " [MARC 630 #0 $m] " " [MARC 630 #0 $n] " " [MARC 630 #0 $o] " " [MARC 630 #0 $p] " " [MARC 630 #0 $r] " " [MARC 630 #0 $s]
|
465
|
+
all_tags('630#0', 'a f g l m n o p r s') { |t|
|
466
|
+
xml['dc'].subject('xsi:type' => 'http://purl.org/dc/terms/LCSH').text list_s(t._afglmnoprs)
|
467
|
+
}
|
468
|
+
end
|
469
|
+
|
470
|
+
def marc2dc_subject_650_x0(xml)
|
471
|
+
# [MARC 650 #0 $a] " " [MARC 650 #0 $x] " " [MARC 650 #0 $y] " " [MARC 650 #0 $z]
|
472
|
+
all_tags('650#0', 'a x y z') { |t|
|
473
|
+
xml['dc'].subject('xsi:type' => 'http://purl.org/dc/terms/LCSH').text list_s(t._axyz)
|
474
|
+
}
|
475
|
+
end
|
476
|
+
|
477
|
+
def marc2dc_subject_650_x2(xml)
|
478
|
+
# [MARC 650 #2 $a] " " [MARC 650 #2 $x]
|
479
|
+
all_tags('650#2', 'a x') { |t|
|
480
|
+
attributes = {'xsi:type' => 'http://purl.org/dc/terms/MESH'}
|
481
|
+
xml['dc'].subject(attributes).text list_s(t._ax)
|
482
|
+
}
|
483
|
+
end
|
484
|
+
|
485
|
+
def marc2dc_subject_691(xml)
|
486
|
+
# [MARC 691 E1 $8] " " [ MARC 691 E1 $a]
|
487
|
+
all_tags('691E1', 'a8') { |t|
|
488
|
+
attributes = {'xsi:type' => 'http://purl.org/dc/terms/UDC'}
|
489
|
+
x = taalcode(t._9)
|
490
|
+
attributes['xml:lang'] = x if x
|
491
|
+
xml['dc'].subject(attributes).text list_s(t._ax)
|
492
|
+
}
|
493
|
+
end
|
494
|
+
|
495
|
+
def marc2dc_subject_082(xml)
|
496
|
+
# [MARC 082 14 $a] " " [MARC 082 14 $x]
|
497
|
+
all_tags('08214', 'a x') { |t|
|
498
|
+
xml['dc'].subject('xsi:type' => 'http://purl.org/dc/terms/DDC', 'xml:lang' => 'en').text list_s(t._ax)
|
499
|
+
}
|
500
|
+
end
|
501
|
+
|
502
|
+
def marc2dc_subject_690(xml)
|
503
|
+
# [MARC 690 [xx]$a]
|
504
|
+
# Set dedups the fields
|
505
|
+
Set.new(each_field('690##', 'a')) { |f| xml['dc'].subject f }
|
506
|
+
end
|
507
|
+
|
508
|
+
def marc2dc_temporal(xml)
|
509
|
+
# DC:TEMPORAL
|
510
|
+
marc2dc_temporal_648(xml)
|
511
|
+
marc2dc_temporal_362(xml)
|
512
|
+
marc2dc_temporal_752(xml)
|
513
|
+
end
|
514
|
+
|
515
|
+
def marc2dc_temporal_648(xml)
|
516
|
+
# [MARC 648 #0 $a] " " [MARC 648 #0 $x] " " [MARC 648 #0 $y] " " [MARC 648 #0 $z]
|
517
|
+
all_tags('648#0', 'a x y z') { |t|
|
518
|
+
xml['dc'].temporal('xsi:type' => 'http://purl.org/dc/terms/LCSH').text list_s(t._axyz)
|
519
|
+
}
|
520
|
+
end
|
521
|
+
|
522
|
+
def marc2dc_temporal_362(xml)
|
523
|
+
# [MARC 362 __ $a]
|
524
|
+
each_field('362__', 'a') { |f| xml['dc'].temporal f }
|
525
|
+
end
|
526
|
+
|
527
|
+
def marc2dc_temporal_752(xml)
|
528
|
+
# [MARC 752 9_ $9]
|
529
|
+
each_field('7529_', '9') { |f| xml['dc'].temporal f }
|
530
|
+
|
531
|
+
# [MARC 752 _9 $a] " (" [MARC 752 _9 $9]")"
|
532
|
+
all_tags('752_9', 'a 9') { |t|
|
533
|
+
xml['dc'].temporal list_s(t._a, opt_r(t._9))
|
534
|
+
}
|
535
|
+
end
|
536
|
+
|
537
|
+
def marc2dc_description(xml)
|
538
|
+
# DC:DESCRIPTION
|
539
|
+
|
540
|
+
x = element(
|
541
|
+
# [MARC 047 __ $a] " (" [MARC 047 __ $9]")"
|
542
|
+
all_tags('047__', 'a 9').collect { |t|
|
543
|
+
list_s(t._a, opt_r(t._9))
|
544
|
+
},
|
545
|
+
# [MARC 598 __ $a]
|
546
|
+
all_fields('598__', 'a'),
|
547
|
+
# [MARC 597 __ $a]
|
548
|
+
all_fields('597__', 'a'),
|
549
|
+
# [MARC 500 __ $a]
|
550
|
+
all_fields('500__', 'a'),
|
551
|
+
# [MARC 520 2_ $a]
|
552
|
+
all_fields('5202_', 'a'),
|
553
|
+
# "Projectie: " [MARC 093 __ $a]
|
554
|
+
all_tags('093__', 'a').collect { |t| element(t._a, prefix: 'Projectie: ') },
|
555
|
+
# "Equidistance " [MARC 094 __ $a*]
|
556
|
+
all_tags('094__', 'a').collect { |t| element(t.a_a, prefix: 'Equidistance ', join: ';') },
|
557
|
+
# [MARC 502 __ $a] ([MARC 502 __ $9])
|
558
|
+
all_tags('502__', 'a 9').collect { |t|
|
559
|
+
list_s(t._a, opt_r(t._9))
|
560
|
+
},
|
561
|
+
# [MARC 529 __ $a] ", " [MARC 529 __ $b] " (" [MARC 529 __ $c] ")"
|
562
|
+
all_tags('529__', 'a b 9').collect { |t|
|
563
|
+
element(t._ab,
|
564
|
+
join: ', ',
|
565
|
+
postfix: opt_r(t._9))
|
566
|
+
},
|
567
|
+
# [MARC 534 9_ $a]
|
568
|
+
all_fields('5349_', 'a'),
|
569
|
+
# [MARC 534 _9 $a] "(oorspronkelijke uitgever)"
|
570
|
+
all_fields('534_9', 'a').collect { |f| element(f, postfix: '(oorspronkelijke uitgever)') },
|
571
|
+
# [MARC 545 __ $a]
|
572
|
+
all_fields('545__', 'a'),
|
573
|
+
# [MARC 562 __ $a]
|
574
|
+
all_fields('562__', 'a'),
|
575
|
+
# [MARC 563 __ $a] " " [MARC 563 __ $9] " (" [MARC 563 __ $u] ")"
|
576
|
+
all_tags('563__', 'a 9 u').collect { |t|
|
577
|
+
list_s(t._a9, opt_r(t._u))
|
578
|
+
},
|
579
|
+
# [MARC 586 __ $a]
|
580
|
+
all_fields('586__', 'a'),
|
581
|
+
# [MARC 711 2_ $a] ", " [MARC 711 2_ $n] ", " [MARC 711 2_ $c] ", " [MARC 711 2_ $d] " (" [MARC 711 2_ $g]")"
|
582
|
+
all_tags('7112_', 'a n c d g').collect { |t|
|
583
|
+
element(t._ancd,
|
584
|
+
join: ', ',
|
585
|
+
postfix: opt_r(t._g))
|
586
|
+
},
|
587
|
+
# [MARC 585 __ $a]
|
588
|
+
all_fields('585__', 'a'),
|
589
|
+
join: "\n"
|
590
|
+
)
|
591
|
+
xml['dc'].description x unless x.empty?
|
592
|
+
end
|
593
|
+
|
594
|
+
def marc2dc_isversionof(xml)
|
595
|
+
# DCTERMS:ISVERSIONOF
|
596
|
+
|
597
|
+
# [MARC 250 __ $a] " (" [MARC 250 __ $b] ")"
|
598
|
+
all_tags('250__', 'a b') { |t|
|
599
|
+
xml['dcterms'].isVersionOf list_s(t._a, opt_r(t._b))
|
600
|
+
}
|
601
|
+
end
|
602
|
+
|
603
|
+
def marc2dc_abstract(xml)
|
604
|
+
# DC:ABSTRACT
|
605
|
+
marc2dc_abstract_520_3__a(xml)
|
606
|
+
marc2dc_abstract_520_39_a(xml)
|
607
|
+
marc2dc_abstract_520_3__u(xml)
|
608
|
+
marc2dc_abstract_520_39_u(xml)
|
609
|
+
end
|
610
|
+
|
611
|
+
def marc2dc_abstract_520_3__a(xml)
|
612
|
+
# [MARC 520 3_ $a]
|
613
|
+
each_field('5203_', 'a') { |f| xml['dc'].abstract f }
|
614
|
+
end
|
615
|
+
|
616
|
+
def marc2dc_abstract_520_39_a(xml)
|
617
|
+
# [MARC 520 39 $t] ": " [MARC 520 39 $a]
|
618
|
+
all_tags('52039', 'a t') { |t|
|
619
|
+
attributes = {}
|
620
|
+
attributes['xml:lang'] = taalcode(t._9) if t.subfield_array('9').size == 1
|
621
|
+
xml['dc'].abstract(attributes).text element(t._ta, join: ': ')
|
622
|
+
}
|
623
|
+
end
|
624
|
+
|
625
|
+
def marc2dc_abstract_520_3__u(xml)
|
626
|
+
# [MARC 520 3_ $u]
|
627
|
+
each_field('5203_', 'u') { |f| xml['dc'].abstract('xsi:type' => 'dcterms:URI').text element(f) }
|
628
|
+
end
|
629
|
+
|
630
|
+
def marc2dc_abstract_520_39_u(xml)
|
631
|
+
# [MARC 520 39 $u]
|
632
|
+
each_field('52039', 'u') { |f| xml['dc'].abstract('xsi:type' => 'dcterms:URI').text element(f) }
|
633
|
+
end
|
634
|
+
|
635
|
+
def marc2dc_tableofcontents(xml)
|
636
|
+
# DCTERMS:TABLEOFCONTENTS
|
637
|
+
marc2dc_tableofcontents_505_0_(xml)
|
638
|
+
marc2dc_tableofcontents_505_09(xml)
|
639
|
+
marc2dc_tableofcontents_505_2_(xml)
|
640
|
+
end
|
641
|
+
|
642
|
+
def marc2dc_tableofcontents_505_0_(xml)
|
643
|
+
# [MARC 505 0_ $a] " "[MARC 505 0_ $t]" / " [MARC 505 0_ $r*] " ("[MARC 505 0_ $9*]")"
|
644
|
+
all_tags('5050_', 'a t r 9') { |t|
|
645
|
+
xml['dcterms'].tableOfContents list_s(t._at,
|
646
|
+
repeat(t.a_r, prefix: '/ '),
|
647
|
+
opt_r(repeat(t.a_9)))
|
648
|
+
}
|
649
|
+
end
|
650
|
+
|
651
|
+
def marc2dc_tableofcontents_505_09(xml)
|
652
|
+
# [MARC 505 09 $a*] "\n" [MARC 505 09 $9*] "\n" [MARC 505 09 $u*]
|
653
|
+
all_tags('50509', 'a u 9') { |t|
|
654
|
+
xml['dcterms'].tableOfContents element(repeat(t.a_a),
|
655
|
+
repeat(t.a_9),
|
656
|
+
repeat(t.a_u),
|
657
|
+
join: "\n")
|
658
|
+
}
|
659
|
+
end
|
660
|
+
|
661
|
+
def marc2dc_tableofcontents_505_2_(xml)
|
662
|
+
# [MARC 505 2_ $a] " "[MARC 505 2_ $t]" / " [MARC 505 2_ $r*] " ("[MARC 505 2_ $9*]")"
|
663
|
+
all_tags('5052_', 'a t r 9') { |t|
|
664
|
+
xml['dcterms'].tableOfContents list_s(t._at,
|
665
|
+
repeat(t.a_r, prefix: '/ '),
|
666
|
+
opt_r(repeat(t.a_9)))
|
667
|
+
}
|
668
|
+
end
|
669
|
+
|
670
|
+
def marc2dc_available(xml)
|
671
|
+
# DCTERMS:AVAILABLE
|
672
|
+
|
673
|
+
# [MARC 591 ## $9] ":" [MARC 591 ## $a] " (" [MARC 591 ## $b] ")"
|
674
|
+
all_tags('591##', 'a b 9') { |t|
|
675
|
+
xml['dcterms'].available element(t._9a, join: ':', postfix: opt_r(t._b, prefix: ' '))
|
676
|
+
}
|
677
|
+
end
|
678
|
+
|
679
|
+
def marc2dc_haspart(xml)
|
680
|
+
# DCTERMS:HASPART
|
681
|
+
|
682
|
+
# [MARC LKR $m]
|
683
|
+
each_field('LKR', 'm') { |f| xml['dcterms'].hasPart f }
|
684
|
+
end
|
685
|
+
|
686
|
+
def marc2dc_contributor(xml)
|
687
|
+
# DC:CONTRIBUTOR
|
688
|
+
marc2dc_contributor_100_0(xml)
|
689
|
+
marc2dc_contributor_100_1(xml)
|
690
|
+
marc2dc_contributor_700(xml)
|
691
|
+
marc2dc_contributor_710_29(xml)
|
692
|
+
marc2dc_contributor_710_2_(xml)
|
693
|
+
marc2dc_contributor_711(xml)
|
694
|
+
end
|
695
|
+
|
696
|
+
def marc2dc_contributor_100_0(xml)
|
697
|
+
# [MARC 100 0_ $a] " " [MARC 100 0_ $b] " ("[MARC 100 0_ $c] ") (" [MARC 100 0_ $d]") ("[MARC 100 0_ $g]"), " [MARC 100 0_ $4]" (" [MARC 100 0_ $9]")"
|
698
|
+
all_tags('1000_', 'a b c d g 9') { |t|
|
699
|
+
next unless check_name(t, :contributor)
|
700
|
+
xml['dc'].contributor element(list_s(t._ab,
|
701
|
+
opt_r(t._c),
|
702
|
+
opt_r(t._d),
|
703
|
+
opt_r(t._g)),
|
704
|
+
list_s(full_name(t),
|
705
|
+
opt_r(t._9)),
|
706
|
+
join: ', ')
|
707
|
+
}
|
708
|
+
end
|
709
|
+
|
710
|
+
def marc2dc_contributor_100_1(xml)
|
711
|
+
# [MARC 100 1_ $a] " " [MARC 100 1_ $b] " ("[MARC 100 1_ $c] ") " "("[MARC 100 1_ $d]") ("[MARC 100 1_ $g]"), " [MARC 100 1_ $4]" ("[MARC 100 1_ $e]") (" [MARC 100 1_ $9]")"
|
712
|
+
all_tags('1001_', 'a b c d g e 9') { |t|
|
713
|
+
next unless check_name(t, :contributor)
|
714
|
+
xml['dc'].contributor element(list_s(t._ab,
|
715
|
+
opt_r(t._c),
|
716
|
+
opt_r(t._d),
|
717
|
+
opt_r(t._g)),
|
718
|
+
list_s(full_name(t),
|
719
|
+
opt_r(t._e),
|
720
|
+
opt_r(t._9)),
|
721
|
+
join: ', ')
|
722
|
+
}
|
723
|
+
end
|
724
|
+
|
725
|
+
def marc2dc_contributor_700(xml)
|
726
|
+
# [MARC 700 0_ $a] ", " [MARC 700 0_ $b] ", " [MARC 700 0_ $c] ", " [MARC 700 0_ $d] ", " [MARC 700 0_ $g] " ( " [MARC 700 0_ $4] "), " [MARC 700 0_ $e]
|
727
|
+
# [MARC 700 1_ $a] ", " [MARC 700 1_ $b] ", " [MARC 700 1_ $c] ", " [MARC 700 1_ $d] ", " [MARC 700 1_ $g] " ( " [MARC 700 1_ $4] "), " [MARC 700 1_ $e]
|
728
|
+
(all_tags('7000_', 'a b c d g e') + all_tags('7001_', 'a b c d g e')).each { |t|
|
729
|
+
next unless check_name(t, :contributor)
|
730
|
+
xml['dc'].contributor element(t._abcd,
|
731
|
+
list_s(t._g,
|
732
|
+
opt_r(full_name(t), fix: '( |)')),
|
733
|
+
t._e,
|
734
|
+
join: ', ')
|
735
|
+
}
|
736
|
+
end
|
737
|
+
|
738
|
+
def marc2dc_contributor_710_29(xml)
|
739
|
+
# [MARC 710 29 $a] "," [MARC 710 29 $g]" (" [MARC 710 29 $4] "), " [MARC 710 29 $e]
|
740
|
+
all_tags('71029', 'a g e') { |t|
|
741
|
+
next unless check_name(t, :contributor)
|
742
|
+
xml['dc'].contributor element(t._a,
|
743
|
+
list_s(t._g,
|
744
|
+
opt_r(full_name(t))),
|
745
|
+
t._e,
|
746
|
+
join: ', ')
|
747
|
+
}
|
748
|
+
end
|
749
|
+
|
750
|
+
def marc2dc_contributor_710_2_(xml)
|
751
|
+
# [MARC 710 2_ $a] " (" [MARC 710 2_ $g] "), " [MARC 710 2_ $4] " (" [MARC 710 2_ $9] ") ("[MARC 710 2_ $e]")"
|
752
|
+
all_tags('7102_', 'a g 9 e') { |t|
|
753
|
+
next unless check_name(t, :contributor)
|
754
|
+
xml['dc'].contributor element(list_s(t._a,
|
755
|
+
opt_r(t._g)),
|
756
|
+
list_s(full_name(t),
|
757
|
+
opt_r(t._9),
|
758
|
+
opt_r(t._e)),
|
759
|
+
join: ', ')
|
760
|
+
}
|
761
|
+
end
|
762
|
+
|
763
|
+
def marc2dc_contributor_711(xml)
|
764
|
+
# [MARC 711 2_ $a] ", "[MARC 711 2_ $n] ", " [MARC 711 2_ $c] ", " [MARC 711 2_ $d] " (" [MARC 711 2_ $g] ")"
|
765
|
+
all_tags('7112_', 'a n c d g') { |t|
|
766
|
+
next unless check_name(t, :contributor)
|
767
|
+
xml['dc'].contributor element(t._anc,
|
768
|
+
list_s(t._d,
|
769
|
+
opt_r(t._g)),
|
770
|
+
join: ', ')
|
771
|
+
}
|
772
|
+
end
|
773
|
+
|
774
|
+
def marc2dc_provenance(xml)
|
775
|
+
# DCTERMS:PROVENANCE
|
776
|
+
marc2dc_provenance_852(xml)
|
777
|
+
marc2dc_provenance_651(xml)
|
778
|
+
end
|
779
|
+
|
780
|
+
def marc2dc_provenance_852(xml)
|
781
|
+
# [MARC 852 __ $b] " " [MARC 852 __ $c]
|
782
|
+
all_tags('852__', 'b c') { |t|
|
783
|
+
xml['dcterms'].provenance list_s(t._b == t._c ? t._b : t._bc)
|
784
|
+
}
|
785
|
+
end
|
786
|
+
|
787
|
+
def marc2dc_provenance_651(xml)
|
788
|
+
# [MARC 561 ## $a] " " [MARC 561 ## $b] " " [MARC 561 ## $9]
|
789
|
+
all_tags('561##', 'a b 9') { |t|
|
790
|
+
xml['dcterms'].provenance list_s(t._ab9)
|
791
|
+
}
|
792
|
+
end
|
793
|
+
|
794
|
+
def marc2dc_publisher(xml)
|
795
|
+
# DC:PUBLISHER
|
796
|
+
marc2dc_publisher_260___(xml)
|
797
|
+
marc2dc_publisher_260__9(xml)
|
798
|
+
marc2dc_publisher_700(xml)
|
799
|
+
marc2dc_publisher_710(xml)
|
800
|
+
end
|
801
|
+
|
802
|
+
def marc2dc_publisher_260___(xml)
|
803
|
+
# [MARC 260 __ $e] " " [MARC 260 __ $f] " " [MARC 260 __ $c] " " [MARC 260 __ $9] " uitgave: " [MARC 260 __ $g]
|
804
|
+
all_tags('260__', 'e f c 9 g') { |t|
|
805
|
+
xml['dc'].publisher list_s(t._c9,
|
806
|
+
element(t._g, prefix: 'uitgave: '))
|
807
|
+
}
|
808
|
+
end
|
809
|
+
|
810
|
+
def marc2dc_publisher_260__9(xml)
|
811
|
+
# [MARC 260 _9 $c] " " [MARC 260 _9 $9*] " (druk: ) " [MARC 260 _9 $g]
|
812
|
+
all_tags('260_9', 'c 9 g') { |t|
|
813
|
+
xml['dc'].publisher list_s(t._c,
|
814
|
+
repeat(t.a_9),
|
815
|
+
element(t._g, prefix: 'uitgave: '))
|
816
|
+
}
|
817
|
+
end
|
818
|
+
|
819
|
+
def marc2dc_publisher_700(xml)
|
820
|
+
# [MARC 700 0_ $a] ", " [MARC 700 0_ $b] ", " [MARC 700 0_ $c] ", " [MARC 700 0_ $d] ", " [MARC 700 0_ $g] " ( " [MARC 700 0_ $4] "), " [MARC 700 0_ $e] "(uitgever)"
|
821
|
+
all_tags('7000_', 'a b c d e g 4') { |t|
|
822
|
+
next unless name_type(t) == :publisher
|
823
|
+
xml['dc'].publisher element(t._abcd,
|
824
|
+
list_s(t._g,
|
825
|
+
opt_r(full_name(t), fix: '( |)')),
|
826
|
+
t._e,
|
827
|
+
join: ', ',
|
828
|
+
postfix: '(uitgever)')
|
829
|
+
}
|
830
|
+
end
|
831
|
+
|
832
|
+
def marc2dc_publisher_710(xml)
|
833
|
+
# [MARC 710 29 $a] " (" [MARC 710 29 $c] "), " [MARC 710 29 $9] "," [710 29 $g] "(drukker)"
|
834
|
+
all_tags('71029', 'a c g 9 4') { |t|
|
835
|
+
xml['dc'].publisher element(list_s(t._a,
|
836
|
+
opt_r(t._c)),
|
837
|
+
t._9g,
|
838
|
+
join: ', ',
|
839
|
+
postfix: '(drukker)')
|
840
|
+
}
|
841
|
+
end
|
842
|
+
|
843
|
+
def marc2dc_date(xml)
|
844
|
+
# DC:DATE
|
845
|
+
marc2dc_date_008(xml)
|
846
|
+
marc2dc_date_130(xml)
|
847
|
+
marc2dc_date_240(xml)
|
848
|
+
end
|
849
|
+
|
850
|
+
def marc2dc_date_008(xml)
|
851
|
+
# [MARC 008 (07-10)] " - " [MARC 008 (11-14)]
|
852
|
+
all_tags('008') { |t|
|
853
|
+
a = t.datas[7..10].dup
|
854
|
+
b = t.datas[11..14].dup
|
855
|
+
# return if both parts contained 'uuuu'
|
856
|
+
next if a.gsub!(/^uuuu$/, 'xxxx') && b.gsub!(/^uuuu$/, 'xxxx')
|
857
|
+
xml['dc'].date element(a, b, join: ' - ')
|
858
|
+
}
|
859
|
+
end
|
860
|
+
|
861
|
+
def marc2dc_date_130(xml)
|
862
|
+
# "Datering origineel werk: " [MARC 130 #_ $f]
|
863
|
+
all_tags('130#_', 'f') { |t|
|
864
|
+
xml['dc'].date element(t._f, prefix: 'Datering origineel werk: ')
|
865
|
+
}
|
866
|
+
end
|
867
|
+
|
868
|
+
def marc2dc_date_240(xml)
|
869
|
+
# "Datering compositie: " [MARC 240 1# $f]
|
870
|
+
all_tags('2401#', 'f') { |t|
|
871
|
+
xml['dc'].date element(t._f, prefix: 'Datering compositie: ')
|
872
|
+
}
|
873
|
+
end
|
874
|
+
|
875
|
+
def marc2dc_type(xml)
|
876
|
+
# DC:TYPE
|
877
|
+
marc2dc_type_655_x9_a(xml)
|
878
|
+
marc2dc_type_655_9x_a(xml)
|
879
|
+
marc2dc_type_655__4_z(xml)
|
880
|
+
marc2dc_type_fmt(xml)
|
881
|
+
marc2dc_type_655_94_z(xml)
|
882
|
+
marc2dc_type_655_9__a(xml)
|
883
|
+
marc2dc_type_088_9__a(xml)
|
884
|
+
marc2dc_type_088____z(xml)
|
885
|
+
marc2dc_type_088____a(xml)
|
886
|
+
marc2dc_type_655__4_a(xml)
|
887
|
+
marc2dc_type_655_94_a(xml)
|
888
|
+
marc2dc_type_088____x(xml)
|
889
|
+
marc2dc_type_655__4_x(xml)
|
890
|
+
marc2dc_type_655_94_x(xml)
|
891
|
+
marc2dc_type_088____y(xml)
|
892
|
+
marc2dc_type_655__4_y(xml)
|
893
|
+
marc2dc_type_655_94_y(xml)
|
894
|
+
marc2dc_type_655__2(xml)
|
895
|
+
end
|
896
|
+
|
897
|
+
def marc2dc_type_655_x9_a(xml)
|
898
|
+
# [MARC 655 #9 $a]
|
899
|
+
each_field('655#9', 'a') { |f| xml['dc'].type f }
|
900
|
+
end
|
901
|
+
|
902
|
+
def marc2dc_type_655_9x_a(xml)
|
903
|
+
# [MARC 655 9# $a]
|
904
|
+
each_field('6559#', 'a') { |f| xml['dc'].type f }
|
905
|
+
end
|
906
|
+
|
907
|
+
def marc2dc_type_655__4_z(xml)
|
908
|
+
# [MARC 655 _4 $z]
|
909
|
+
each_field('655_4', 'z') { |f| xml['dc'].type f }
|
910
|
+
end
|
911
|
+
|
912
|
+
def marc2dc_type_fmt(xml)
|
913
|
+
# [MARC FMT]
|
914
|
+
all_tags('FMT') { |t| xml['dc'].type fmt(t.datas) }
|
915
|
+
end
|
916
|
+
|
917
|
+
def marc2dc_type_655_94_z(xml)
|
918
|
+
# [MARC 655 94 $z]
|
919
|
+
each_field('65594', 'z') { |f| xml['dc'].type f }
|
920
|
+
end
|
921
|
+
|
922
|
+
def marc2dc_type_655_9__a(xml)
|
923
|
+
# [MARC 655 9_ $a]
|
924
|
+
each_field('6559_', 'a') { |f| xml['dc'].type f }
|
925
|
+
end
|
926
|
+
|
927
|
+
def marc2dc_type_088_9__a(xml)
|
928
|
+
# [MARC 088 9_ $a]
|
929
|
+
each_field('0889_', 'a') { |f| xml['dc'].type f } if each_field('088__', 'axy').empty?
|
930
|
+
end
|
931
|
+
|
932
|
+
def marc2dc_type_088____z(xml)
|
933
|
+
# [MARC 088 __ $z]
|
934
|
+
each_field('088__', 'z') { |f| xml['dc'].type f }
|
935
|
+
end
|
936
|
+
|
937
|
+
def marc2dc_type_088____a(xml)
|
938
|
+
# [MARC 088 __ $a]
|
939
|
+
each_field('088__', 'a') { |f| xml['dc'].type('xml:lang' => 'en').text f }
|
940
|
+
end
|
941
|
+
|
942
|
+
def marc2dc_type_655__4_a(xml)
|
943
|
+
# [MARC 655 _4 $a]
|
944
|
+
each_field('655_4', 'a') { |f| xml['dc'].type('xml:lang' => 'en').text f }
|
945
|
+
end
|
946
|
+
|
947
|
+
def marc2dc_type_655_94_a(xml)
|
948
|
+
# [MARC 655 94 $a]
|
949
|
+
each_field('65594', 'a') { |f| xml['dc'].type('xml:lang' => 'en').text f }
|
950
|
+
end
|
951
|
+
|
952
|
+
def marc2dc_type_088____x(xml)
|
953
|
+
# [MARC 088 __ $x]
|
954
|
+
each_field('088__', 'x') { |f| xml['dc'].type('xml:lang' => 'nl').text f }
|
955
|
+
end
|
956
|
+
|
957
|
+
def marc2dc_type_655__4_x(xml)
|
958
|
+
# [MARC 655 _4 $x]
|
959
|
+
each_field('655_4', 'x') { |f| xml['dc'].type('xml:lang' => 'nl').text f }
|
960
|
+
end
|
961
|
+
|
962
|
+
def marc2dc_type_655_94_x(xml)
|
963
|
+
# [MARC 655 94 $x]
|
964
|
+
each_field('65594', 'x') { |f| xml['dc'].type('xml:lang' => 'nl').text f }
|
965
|
+
end
|
966
|
+
|
967
|
+
def marc2dc_type_088____y(xml)
|
968
|
+
# [MARC 088 __ $y]
|
969
|
+
each_field('088__', 'y') { |f| xml['dc'].type('xml:lang' => 'fr').text f }
|
970
|
+
end
|
971
|
+
|
972
|
+
def marc2dc_type_655__4_y(xml)
|
973
|
+
# [MARC 655 _4 $y]
|
974
|
+
each_field('655_4', 'y') { |f| xml['dc'].type('xml:lang' => 'fr').text f }
|
975
|
+
end
|
976
|
+
|
977
|
+
def marc2dc_type_655_94_y(xml)
|
978
|
+
# [MARC 655 94 $y]
|
979
|
+
each_field('65594', 'y') { |f| xml['dc'].type('xml:lang' => 'fr').text f }
|
980
|
+
end
|
981
|
+
|
982
|
+
def marc2dc_type_655__2(xml)
|
983
|
+
# [MARC 655 #2 $a] " " [MARC 655 #2 $x*] " " [MARC 655 #2 $9]
|
984
|
+
all_tags('655#2', 'a x 9') { |t|
|
985
|
+
xml['dc'].type({'xsi:type' => 'http://purl.org/dc/terms/MESH'}).text list_s(t._a,
|
986
|
+
repeat(t.a_x),
|
987
|
+
t._9)
|
988
|
+
}
|
989
|
+
end
|
990
|
+
|
991
|
+
def marc2dc_spatial(xml)
|
992
|
+
# DCTERMS:SPATIAL
|
993
|
+
marc2dc_spatial_752(xml)
|
994
|
+
marc2dc_spatial_034_1(xml)
|
995
|
+
marc2dc_spatial_034_3(xml)
|
996
|
+
marc2dc_spatial_034_9(xml)
|
997
|
+
marc2dc_spatial_507(xml)
|
998
|
+
marc2dc_spatial_651__0(xml)
|
999
|
+
marc2dc_spatial_651__2(xml)
|
1000
|
+
end
|
1001
|
+
|
1002
|
+
def marc2dc_spatial_752(xml)
|
1003
|
+
# [MARC 752 __ $a] " " [MARC 752 __ $c] " " [MARC 752 __ $d] " (" [MARC 752 __ $9] ")"
|
1004
|
+
all_tags('752__', 'a c d 9') { |t|
|
1005
|
+
xml['dcterms'].spatial list_s(t._acd,
|
1006
|
+
opt_r(t._9))
|
1007
|
+
}
|
1008
|
+
end
|
1009
|
+
|
1010
|
+
def marc2dc_spatial_034_1(xml)
|
1011
|
+
# "Schaal: " [MARC 034 1_ $a]
|
1012
|
+
each_field('0341_', 'a') { |f|
|
1013
|
+
xml['dcterms'].spatial element(f, prefix: 'Schaal: ')
|
1014
|
+
}
|
1015
|
+
end
|
1016
|
+
|
1017
|
+
def marc2dc_spatial_034_3(xml)
|
1018
|
+
# "Schaal: " [MARC 034 3_ $a*]
|
1019
|
+
all_tags('0343_', 'a') { |t|
|
1020
|
+
xml['dcterms'].spatial repeat(t.a_a, prefix: 'Schaal: ')
|
1021
|
+
}
|
1022
|
+
end
|
1023
|
+
|
1024
|
+
def marc2dc_spatial_034_9(xml)
|
1025
|
+
# [MARC 034 91 $d] " " [MARC 034 91 $e] " " [MARC 034 91 $f] " " [MARC 034 91 $g]
|
1026
|
+
all_tags('03491', 'd e f g') { |t| xml['dcterms'].spatial list_s(t._defg) }
|
1027
|
+
end
|
1028
|
+
|
1029
|
+
def marc2dc_spatial_507(xml)
|
1030
|
+
# [MARC 507 __ $a]
|
1031
|
+
each_field('507__', 'a') { |f| xml['dcterms'].spatial f }
|
1032
|
+
end
|
1033
|
+
|
1034
|
+
def marc2dc_spatial_651__0(xml)
|
1035
|
+
# [MARC 651 #0 $a] " " [MARC 651 #0 $x*] " " [MARC 651 #0 $y] " " [MARC 651 #0 $z]
|
1036
|
+
all_tags('651#0', 'a x y z') { |t|
|
1037
|
+
xml['dcterms'].spatial({'xsi:type' => 'http://purl.org/dc/terms/LCSH'}).text list_s(t._a,
|
1038
|
+
repeat(t.a_x),
|
1039
|
+
t._yz)
|
1040
|
+
}
|
1041
|
+
end
|
1042
|
+
|
1043
|
+
def marc2dc_spatial_651__2(xml)
|
1044
|
+
# [MARC 651 #2 $a] " " [MARC 651 #2 $x*]
|
1045
|
+
all_tags('651#2', 'a x') { |t|
|
1046
|
+
xml['dcterms'].spatial({'xsi:type' => 'http://purl.org/dc/terms/LCSH'}).text list_s(t._a,
|
1047
|
+
repeat(t.a_x))
|
1048
|
+
}
|
1049
|
+
end
|
1050
|
+
|
1051
|
+
def marc2dc_extent(xml)
|
1052
|
+
# DCTERMS:EXTENT
|
1053
|
+
marc2dc_extent_300__(xml)
|
1054
|
+
marc2dc_extent_300_9(xml)
|
1055
|
+
marc2dc_extent_306(xml)
|
1056
|
+
marc2dc_extent_309(xml)
|
1057
|
+
marc2dc_extent_339(xml)
|
1058
|
+
end
|
1059
|
+
|
1060
|
+
def marc2dc_extent_300__(xml)
|
1061
|
+
# [MARC 300 __ $a*] " " [MARC 300 __ $b] " " [MARC 300__ $c*] " " [MARC 300 __ $e] " (" [MARC 300 __ $9] ")"
|
1062
|
+
all_tags('300__', 'a b c e 9') { |t|
|
1063
|
+
xml['dcterms'].extent list_s(repeat(t.a_a),
|
1064
|
+
t._b,
|
1065
|
+
repeat(t.a_c),
|
1066
|
+
t._e,
|
1067
|
+
opt_r(t._9))
|
1068
|
+
}
|
1069
|
+
end
|
1070
|
+
|
1071
|
+
def marc2dc_extent_300_9(xml)
|
1072
|
+
# [MARC 300 9_ $a] " " [MARC 300 9_ $b] " " [MARC 300 9_ $c*] " " [MARC 300 9_ $e] " (" [MARC 300 9_ $9]")"
|
1073
|
+
all_tags('3009_', 'a b c e 9') { |t|
|
1074
|
+
xml['dcterms'].extent list_s(t._ab,
|
1075
|
+
repeat(t.a_c),
|
1076
|
+
t._e,
|
1077
|
+
opt_r(t._9))
|
1078
|
+
}
|
1079
|
+
end
|
1080
|
+
|
1081
|
+
def marc2dc_extent_306(xml)
|
1082
|
+
# [MARC 306 __ $a*]
|
1083
|
+
all_tags('306__', 'a') { |t| xml['dcterms'].extent repeat(t.a_a.collect { |y| y.scan(/(\d\d)(\d\d)(\d\d)/).join(':') }) }
|
1084
|
+
end
|
1085
|
+
|
1086
|
+
def marc2dc_extent_309(xml)
|
1087
|
+
# [MARC 309 __ $a]
|
1088
|
+
each_field('309__', 'a') { |f| xml['dcterms'].extent f }
|
1089
|
+
end
|
1090
|
+
|
1091
|
+
def marc2dc_extent_339(xml)
|
1092
|
+
# [MARC 339 __ $a*]
|
1093
|
+
all_tags('339__', 'a') { |t| xml['dcterms'].extent repeat(t.a_a) }
|
1094
|
+
end
|
1095
|
+
|
1096
|
+
def marc2dc_accrualperiodicity(xml)
|
1097
|
+
# DCTERMS:ACCRUALPERIODICITY
|
1098
|
+
|
1099
|
+
# [MARC 310 __ $a] " (" [MARC 310 __ $b] ")"
|
1100
|
+
all_tags('310__', 'a b') { |t|
|
1101
|
+
xml['dcterms'].accrualPeriodicity list_s(t._a,
|
1102
|
+
opt_r(t._b))
|
1103
|
+
}
|
1104
|
+
end
|
1105
|
+
|
1106
|
+
def marc2dc_format(xml)
|
1107
|
+
# DC:FORMAT
|
1108
|
+
|
1109
|
+
# [MARC 340 __ $a*]
|
1110
|
+
all_tags('340__', 'a') { |t|
|
1111
|
+
xml['dc'].format repeat(t.a_a)
|
1112
|
+
}
|
1113
|
+
end
|
1114
|
+
|
1115
|
+
def marc2dc_medium(xml)
|
1116
|
+
# DCTERMS:MEDIUM
|
1117
|
+
marc2dc_medium_319__(xml)
|
1118
|
+
marc2dc_medium_319_9(xml)
|
1119
|
+
marc2dc_medium_399(xml)
|
1120
|
+
end
|
1121
|
+
|
1122
|
+
def marc2dc_medium_319__(xml)
|
1123
|
+
# [MARC 319 __ $a]
|
1124
|
+
each_field('319__', 'a') { |f| xml['dcterms'].medium f }
|
1125
|
+
end
|
1126
|
+
|
1127
|
+
def marc2dc_medium_319_9(xml)
|
1128
|
+
# [MARC 319 9_ $a] " (" [MARC 319 9_ $9] ")"
|
1129
|
+
all_tags('3199_', 'a 9') { |t|
|
1130
|
+
xml['dcterms'].medium list_s(t._a,
|
1131
|
+
opt_r(t._9))
|
1132
|
+
}
|
1133
|
+
end
|
1134
|
+
|
1135
|
+
def marc2dc_medium_399(xml)
|
1136
|
+
# [MARC 399 __ $a] " " [MARC 399 __ $b] " (" [MARC 399 __ $9] ")"
|
1137
|
+
all_tags('399__', 'a b 9') { |t|
|
1138
|
+
xml['dcterms'].medium list_s(t._ab,
|
1139
|
+
opt_r(t._9))
|
1140
|
+
}
|
1141
|
+
end
|
1142
|
+
|
1143
|
+
def marc2dc_relation(xml)
|
1144
|
+
# DC:RELATION
|
1145
|
+
|
1146
|
+
# [MARC 580 __ $a]
|
1147
|
+
each_field('580__', 'a') { |e| xml['dc'].relation e }
|
1148
|
+
end
|
1149
|
+
|
1150
|
+
def marc2dc_replaces(xml)
|
1151
|
+
# DCTERMS:REPLACES
|
1152
|
+
|
1153
|
+
# [MARC 247 1# $a] " : " [MARC 247 1# $b] " (" [MARC 247 1# $9] ")"
|
1154
|
+
all_tags('2471#', 'a b 9') { |t|
|
1155
|
+
xml['dcterms'].replaces list_s(element(t._a, t._b, join: ' : '), opt_r(t._9))
|
1156
|
+
}
|
1157
|
+
end
|
1158
|
+
|
1159
|
+
def marc2dc_hasversion(xml)
|
1160
|
+
# DCTERMS:HASVERSION
|
1161
|
+
|
1162
|
+
# [MARC 534 __ $a]
|
1163
|
+
each_field('534__', 'a') { |f| xml['dcterms'].hasVersion f }
|
1164
|
+
end
|
1165
|
+
|
1166
|
+
def marc2dc_source(xml)
|
1167
|
+
# DC:SOURCE
|
1168
|
+
marc2dc_source_852___(xml)
|
1169
|
+
marc2dc_source_856(xml)
|
1170
|
+
end
|
1171
|
+
|
1172
|
+
def marc2dc_source_852___(xml)
|
1173
|
+
# [MARC 852 __ $b] " " [MARC 852 __ $c] " " [MARC 852 __ $k] " " [MARC 852 __ $h] " " [MARC 852 __ $9] " " [MARC 852 __ $l] " " [MARC 852 __ $m]
|
1174
|
+
all_tags('852__', 'b c k h 9 l m') { |t|
|
1175
|
+
xml['dc'].source list_s(t._bckh9lm)
|
1176
|
+
}
|
1177
|
+
end
|
1178
|
+
|
1179
|
+
def marc2dc_source_856(xml)
|
1180
|
+
marc2dc_source_856__1(xml)
|
1181
|
+
marc2dc_source_856__2(xml)
|
1182
|
+
marc2dc_source_856_4(xml)
|
1183
|
+
end
|
1184
|
+
|
1185
|
+
def marc2dc_source_856__1(xml)
|
1186
|
+
# [MARC 856 _1 $u]
|
1187
|
+
all_tags('856_1', 'uy') { |t|
|
1188
|
+
xml['dc'].source('xsi:type' => 'dcterms:URI').text element(t._u,
|
1189
|
+
repeat(t.a_y.collect { |y| CGI::escape(y) }),
|
1190
|
+
join: '#')
|
1191
|
+
}
|
1192
|
+
end
|
1193
|
+
|
1194
|
+
def marc2dc_source_856__2(xml)
|
1195
|
+
# [MARC 856 _2 $u]
|
1196
|
+
all_tags('856_2', 'uy') { |t|
|
1197
|
+
xml['dc'].source('xsi:type' => 'dcterms:URI').text element(t._u,
|
1198
|
+
repeat(t.a_y.collect { |y| CGI::escape(y) }),
|
1199
|
+
join: '#')
|
1200
|
+
}
|
1201
|
+
end
|
1202
|
+
|
1203
|
+
def marc2dc_source_856_4(xml)
|
1204
|
+
# [MARC 856 40 $u]
|
1205
|
+
all_tags('85640', 'u') { |t|
|
1206
|
+
xml['dc'].source('xsi:type' => 'dcterms:URI').text element(t._u)
|
1207
|
+
}
|
1208
|
+
end
|
1209
|
+
|
1210
|
+
def marc2dc_language(xml)
|
1211
|
+
# DC:LANGUAGE
|
1212
|
+
marc2dc_language_041_9(xml)
|
1213
|
+
marc2dc_language_008(xml)
|
1214
|
+
marc2dc_language_130(xml)
|
1215
|
+
marc2dc_language_240(xml)
|
1216
|
+
marc2dc_language_546(xml)
|
1217
|
+
end
|
1218
|
+
|
1219
|
+
def marc2dc_language_041_9(xml)
|
1220
|
+
marc2dc_language_041_9_(xml)
|
1221
|
+
marc2dc_language_041__9(xml)
|
1222
|
+
end
|
1223
|
+
|
1224
|
+
def marc2dc_language_041_9_(xml)
|
1225
|
+
marc2dc_language_041_9___a(xml)
|
1226
|
+
marc2dc_language_041_9__d(xml)
|
1227
|
+
marc2dc_language_041_9__e(xml)
|
1228
|
+
marc2dc_language_041_9__f(xml)
|
1229
|
+
marc2dc_language_041_9__h(xml)
|
1230
|
+
marc2dc_language_014_9__9(xml)
|
1231
|
+
end
|
1232
|
+
|
1233
|
+
def marc2dc_language_041_9___a(xml)
|
1234
|
+
# [MARC 041 9_ $a*]
|
1235
|
+
all_tags('0419_', 'a') { |t|
|
1236
|
+
xml['dc'].language repeat(t.a_a.collect { |y| taalcode(y) })
|
1237
|
+
}
|
1238
|
+
end
|
1239
|
+
|
1240
|
+
def marc2dc_language_041_9__d(xml)
|
1241
|
+
# [MARC 041 9_ $d*]
|
1242
|
+
all_tags('0419_', 'd') { |t|
|
1243
|
+
xml['dc'].language repeat(t.a_d.collect { |y| taalcode(y) })
|
1244
|
+
}
|
1245
|
+
end
|
1246
|
+
|
1247
|
+
def marc2dc_language_041_9__e(xml)
|
1248
|
+
# [MARC 041 9_ $e*]
|
1249
|
+
all_tags('0419_', 'e') { |t|
|
1250
|
+
xml['dc'].language repeat(t.a_e.collect { |y| taalcode(y) })
|
1251
|
+
}
|
1252
|
+
end
|
1253
|
+
|
1254
|
+
def marc2dc_language_041_9__f(xml)
|
1255
|
+
# [MARC 041 9_ $f*]
|
1256
|
+
all_tags('0419_', 'f') { |t|
|
1257
|
+
xml['dc'].language repeat(t.a_f.collect { |y| taalcode(y) })
|
1258
|
+
}
|
1259
|
+
end
|
1260
|
+
|
1261
|
+
def marc2dc_language_041_9__h(xml)
|
1262
|
+
# [MARC 041 9_ $h*]
|
1263
|
+
all_tags('0419_', 'h') { |t|
|
1264
|
+
xml['dc'].language repeat(t.a_h.collect { |y| taalcode(y) })
|
1265
|
+
}
|
1266
|
+
end
|
1267
|
+
|
1268
|
+
def marc2dc_language_014_9__9(xml)
|
1269
|
+
# [MARC 041 9_ $9*]
|
1270
|
+
all_tags('0419_', '9') { |t|
|
1271
|
+
xml['dc'].language repeat(t.a_9.collect { |y| taalcode(y) })
|
1272
|
+
}
|
1273
|
+
end
|
1274
|
+
|
1275
|
+
def marc2dc_language_041__9(xml)
|
1276
|
+
marc2dc_language_041__9_a(xml)
|
1277
|
+
marc2dc_language_041__9_h(xml)
|
1278
|
+
marc2dc_language_041__9_9(xml)
|
1279
|
+
end
|
1280
|
+
|
1281
|
+
def marc2dc_language_041__9_a(xml)
|
1282
|
+
# "Gedubde taal: " [MARC 041 _9 $a*]
|
1283
|
+
all_tags('041_9', 'a') { |t|
|
1284
|
+
xml['dc'].language repeat(t.a_a.collect { |y| taalcode(y) }, prefix: 'Gedubde taal:')
|
1285
|
+
}
|
1286
|
+
end
|
1287
|
+
|
1288
|
+
def marc2dc_language_041__9_h(xml)
|
1289
|
+
# [MARC 041 _9 $h*]
|
1290
|
+
all_tags('041_9', 'h') { |t|
|
1291
|
+
xml['dc'].language repeat(t.a_h.collect { |y| taalcode(y) })
|
1292
|
+
}
|
1293
|
+
end
|
1294
|
+
|
1295
|
+
def marc2dc_language_041__9_9(xml)
|
1296
|
+
# "Ondertitels: " [MARC 041 _9 $9*]
|
1297
|
+
all_tags('041_9', '9') { |t|
|
1298
|
+
xml['dc'].language element(t.a_9.collect { |y| taalcode(y) }, prefix: 'Ondertitels:')
|
1299
|
+
}
|
1300
|
+
end
|
1301
|
+
|
1302
|
+
def marc2dc_language_008(xml)
|
1303
|
+
# [MARC 008 (35-37)]
|
1304
|
+
all_tags('008') { |t|
|
1305
|
+
xml['dc'].language taalcode(t.datas[35..37])
|
1306
|
+
} if all_tags('041').empty?
|
1307
|
+
end
|
1308
|
+
|
1309
|
+
def marc2dc_language_130(xml)
|
1310
|
+
# [MARC 130 #_ $l]
|
1311
|
+
each_field('130#_', 'l') { |f| xml['dc'].language f }
|
1312
|
+
end
|
1313
|
+
|
1314
|
+
def marc2dc_language_240(xml)
|
1315
|
+
# [MARC 240 #_ $l]
|
1316
|
+
each_field('240#_', 'l') { |f| xml['dc'].language f }
|
1317
|
+
end
|
1318
|
+
|
1319
|
+
def marc2dc_language_546(xml)
|
1320
|
+
# [MARC 546 __ $a]
|
1321
|
+
each_field('546__', 'a') { |f| xml['dc'].language f }
|
1322
|
+
|
1323
|
+
# []MARC 546 9_ $a]
|
1324
|
+
each_field('5469_', 'a') { |f| xml['dc'].language f }
|
1325
|
+
|
1326
|
+
# [MARC 546 _9 $a]
|
1327
|
+
each_field('546_9', 'a') { |f| xml['dc'].language f }
|
1328
|
+
end
|
1329
|
+
|
1330
|
+
def marc2dc_rightsholder(xml)
|
1331
|
+
# DCTERMS:RIGHTSHOLDER
|
1332
|
+
marc2dc_rightsholder_700(xml)
|
1333
|
+
marc2dc_rightsholder_710(xml)
|
1334
|
+
end
|
1335
|
+
|
1336
|
+
def marc2dc_rightsholder_700(xml)
|
1337
|
+
# [MARC 700 0_ $a] ", " [MARC 700 0_ $b] ", " [MARC 700 0_ $c] ", " [MARC 700 0_ $d] ", " [MARC 700 0_ $g] ", " [MARC 700 0_ $e] (als $4 cph)
|
1338
|
+
all_tags('7000_', '4') { |t|
|
1339
|
+
next unless check_name(t, :rightsholder)
|
1340
|
+
xml['dcterms'].rightsholder element(t._abcdge, join: ', ')
|
1341
|
+
}
|
1342
|
+
end
|
1343
|
+
|
1344
|
+
def marc2dc_rightsholder_710(xml)
|
1345
|
+
# [MARC 710 2_ $a] " (" [MARC 710 2_ $g] "), (" [MARC 710 2_ $9] ") ("[MARC 710 2_ $e]")" (als $4 cph)
|
1346
|
+
all_tags('7102_', '4') { |t|
|
1347
|
+
next unless check_name(t, :rightsholder)
|
1348
|
+
xml['dcterms'].rightsholder element(list_s(t._a,
|
1349
|
+
opt_r(t._g)),
|
1350
|
+
list_s(opt_r(t._9),
|
1351
|
+
opt_r(t._e)),
|
1352
|
+
join: ', ')
|
1353
|
+
}
|
1354
|
+
end
|
1355
|
+
|
1356
|
+
def marc2dc_references(xml)
|
1357
|
+
# DCTERMS:REFERENCES
|
1358
|
+
|
1359
|
+
# [MARC 581 __ $a]
|
1360
|
+
each_field('581__', 'a') { |f| xml['dcterms'].references f }
|
1361
|
+
end
|
1362
|
+
|
1363
|
+
def marc2dc_isreferencedby(xml)
|
1364
|
+
# DCTERMS:ISREFERENCEDBY
|
1365
|
+
marc2dc_isreferencedby_510_0(xml)
|
1366
|
+
marc2dc_isreferencedby_510_3(xml)
|
1367
|
+
marc2dc_isreferencedby_510_4(xml)
|
1368
|
+
end
|
1369
|
+
|
1370
|
+
def marc2dc_isreferencedby_510_0(xml)
|
1371
|
+
# [MARC 510 0_ $a] ", " [MARC 510 0_ $c]
|
1372
|
+
all_tags('5100_', 'a c') { |t|
|
1373
|
+
xml['dcterms'].isReferencedBy element(t._ac, join: ', ')
|
1374
|
+
}
|
1375
|
+
end
|
1376
|
+
|
1377
|
+
def marc2dc_isreferencedby_510_3(xml)
|
1378
|
+
# [MARC 510 3_ $a] ", " [MARC 510 3_ $c]
|
1379
|
+
all_tags('5103_', 'a c') { |t|
|
1380
|
+
xml['dcterms'].isReferencedBy element(t._ac, join: ', ')
|
1381
|
+
}
|
1382
|
+
end
|
1383
|
+
|
1384
|
+
def marc2dc_isreferencedby_510_4(xml)
|
1385
|
+
# [MARC 510 4_ $a] ", " [MARC 510 4_ $c]
|
1386
|
+
all_tags('5104_', 'a c') { |t|
|
1387
|
+
xml['dcterms'].isReferencedBy element(t._ac, join: ', ')
|
1388
|
+
}
|
1389
|
+
end
|
1390
|
+
|
1391
|
+
protected
|
1392
|
+
|
1393
|
+
def check_name(data, b)
|
1394
|
+
name_type(data) == b
|
1395
|
+
end
|
1396
|
+
|
1397
|
+
def name_type(data)
|
1398
|
+
#noinspection RubyResolve
|
1399
|
+
code = data._4.to_sym
|
1400
|
+
if DOLLAR4TABLE[data.tag].has_key? code
|
1401
|
+
return DOLLAR4TABLE[data.tag][code][1]
|
1402
|
+
end
|
1403
|
+
Application.logger.warn(self.class) { "Did not find $4 value in lookuptable: #{data.dump_line}" }
|
1404
|
+
:contributor
|
1405
|
+
end
|
1406
|
+
|
1407
|
+
def full_name(data)
|
1408
|
+
#noinspection RubyResolve
|
1409
|
+
code = data._4.to_sym
|
1410
|
+
return '' unless DOLLAR4TABLE[data.tag].has_key? code
|
1411
|
+
DOLLAR4TABLE[data.tag][code][0]
|
1412
|
+
end
|
1413
|
+
|
1414
|
+
def taalcode(code)
|
1415
|
+
TAALCODES[code.to_sym]
|
1416
|
+
end
|
1417
|
+
|
1418
|
+
def bibnaam(code)
|
1419
|
+
BIBCODES[code] || ''
|
1420
|
+
end
|
1421
|
+
|
1422
|
+
def fmt(code)
|
1423
|
+
FMT[code.to_sym] || ''
|
1424
|
+
end
|
1425
|
+
|
1426
|
+
def lookup(table, key, constraints = {})
|
1427
|
+
table.select { |value| constraints.map { |k,v| value[k] == v }.all? }.map { |v| v[key] }
|
1428
|
+
end
|
1429
|
+
|
1430
|
+
#noinspection RubyStringKeysInHashInspection
|
1431
|
+
DOLLAR4TABLE = {
|
1432
|
+
'700' => {
|
1433
|
+
apb: ['approbation, approbatie, approbation', :contributor],
|
1434
|
+
apr: ['preface', nil],
|
1435
|
+
arc: ['architect', :contributor],
|
1436
|
+
arr: ['arranger', :contributor],
|
1437
|
+
art: ['artist', :creator],
|
1438
|
+
aui: ['author of introduction', :contributor ],
|
1439
|
+
aut: ['author', :creator],
|
1440
|
+
bbl: ['bibliography', :contributor],
|
1441
|
+
bdd: ['binder', :contributor],
|
1442
|
+
bsl: ['bookseller', :contributor],
|
1443
|
+
ccp: ['concept', :contributor],
|
1444
|
+
chr: ['choreographer', :contributor],
|
1445
|
+
clb: ['collaborator', :contributor],
|
1446
|
+
cmm: ['commentator (rare books only)', :contributor],
|
1447
|
+
cmp: ['composer', :contributor],
|
1448
|
+
cnd: ['conductor', :contributor],
|
1449
|
+
cns: ['censor, censeur', :contributor],
|
1450
|
+
cod: ['co-ordination', :contributor],
|
1451
|
+
cof: ['collection from', :contributor],
|
1452
|
+
coi: ['compiler index', :contributor],
|
1453
|
+
com: ['compiler', :contributor],
|
1454
|
+
con: ['consultant', :contributor],
|
1455
|
+
cov: ['cover designer', :contributor],
|
1456
|
+
cph: ['copyright holder', :rightsholder],
|
1457
|
+
cre: ['creator', :creator],
|
1458
|
+
csp: ['project manager', :contributor],
|
1459
|
+
ctb: ['contributor', :contributor],
|
1460
|
+
ctg: ['cartographer', :creator],
|
1461
|
+
cur: ['curator', :contributor],
|
1462
|
+
dfr: ['defender (rare books only)', :contributor],
|
1463
|
+
dgg: ['degree grantor', :contributor],
|
1464
|
+
dir: ['director', :creator],
|
1465
|
+
dnc: ['dancer', :contributor],
|
1466
|
+
dpc: ['depicted', :contributor],
|
1467
|
+
dsr: ['designer', :contributor],
|
1468
|
+
dte: ['dedicatee', :contributor],
|
1469
|
+
dub: ['dubious author', :creator],
|
1470
|
+
eda: ['editor assistant', :contributor],
|
1471
|
+
edc: ['editor in chief', :creator],
|
1472
|
+
ede: ['final editing', :creator],
|
1473
|
+
edt: ['editor', :creator],
|
1474
|
+
egr: ['engraver', :contributor],
|
1475
|
+
eim: ['editor of image', :contributor],
|
1476
|
+
eow: ['editor original work', :contributor],
|
1477
|
+
etc: ['etcher', :contributor],
|
1478
|
+
etr: ['etcher', :contributor],
|
1479
|
+
eul: ['eulogist, drempeldichter, panégyriste', :contributor],
|
1480
|
+
hnr: ['honoree', :contributor],
|
1481
|
+
ihd: ['expert trainee post (inhoudsdeskundige stageplaats)', :contributor],
|
1482
|
+
ill: ['illustrator', :contributor],
|
1483
|
+
ilu: ['illuminator', :contributor],
|
1484
|
+
itr: ['instrumentalist', :contributor],
|
1485
|
+
ive: ['interviewee', :contributor],
|
1486
|
+
ivr: ['interviewer', :contributor],
|
1487
|
+
lbt: ['librettist', :contributor],
|
1488
|
+
ltg: ['lithographer', :contributor],
|
1489
|
+
lyr: ['lyricist', :contributor],
|
1490
|
+
mus: ['musician', :contributor],
|
1491
|
+
nrt: ['narrator, reader', :contributor],
|
1492
|
+
ogz: ['started by', :creator],
|
1493
|
+
oqz: ['continued by', :creator],
|
1494
|
+
orc: ['orchestrator', :contributor],
|
1495
|
+
orm: ['organizer of meeting', :contributor],
|
1496
|
+
oth: ['other', :contributor],
|
1497
|
+
pat: ['patron, opdrachtgever, maître d\'oeuvre', :contributor],
|
1498
|
+
pht: ['photographer', :creator],
|
1499
|
+
prf: ['performer', :contributor],
|
1500
|
+
pro: ['producer', :contributor],
|
1501
|
+
prt: ['printer', :publisher],
|
1502
|
+
pub: ['publication about', :subject],
|
1503
|
+
rbr: ['rubricator', :contributor],
|
1504
|
+
rea: ['realization', :contributor],
|
1505
|
+
reb: ['revised by', :contributor],
|
1506
|
+
rev: ['reviewer', :contributor],
|
1507
|
+
rpt: ['reporter', :contributor],
|
1508
|
+
rpy: ['responsible party', :contributor],
|
1509
|
+
sad: ['scientific advice', :contributor],
|
1510
|
+
sce: ['scenarist', :contributor],
|
1511
|
+
sco: ['scientific co-operator', :contributor],
|
1512
|
+
scr: ['scribe', :contributor],
|
1513
|
+
sng: ['singer', :contributor],
|
1514
|
+
spn: ['sponsor', :contributor],
|
1515
|
+
tec: ['technical direction', :contributor],
|
1516
|
+
thc: ['thesis co-advisor(s)', :contributor],
|
1517
|
+
thj: ['member of the jury', :contributor],
|
1518
|
+
ths: ['thesis advisor', :contributor],
|
1519
|
+
trc: ['transcriber', :contributor],
|
1520
|
+
trl: ['translator', :contributor],
|
1521
|
+
udr: ['under direction of', :contributor],
|
1522
|
+
voc: ['vocalist', :contributor],
|
1523
|
+
},
|
1524
|
+
'710' => {
|
1525
|
+
adq: ['readapted by', :contributor],
|
1526
|
+
add: ['addressee, bestemmeling', :contributor],
|
1527
|
+
aow: ['author original work, auteur oorspronkelijk werk, auteur ouvrage original', :contributor],
|
1528
|
+
apr: ['preface', :/],
|
1529
|
+
arc: ['architect', :contributor],
|
1530
|
+
art: ['artist', :creator],
|
1531
|
+
aut: ['author', :creator],
|
1532
|
+
bbl: ['bibliography', :contributor],
|
1533
|
+
bdd: ['binder', :contributor],
|
1534
|
+
bsl: ['bookseller', :contributor],
|
1535
|
+
ccp: ['Conceptor', :contributor],
|
1536
|
+
clb: ['collaborator', :contributor],
|
1537
|
+
cod: ['co-ordination', :contributor],
|
1538
|
+
cof: ['collection from', :contributor],
|
1539
|
+
coi: ['compiler index', :contributor],
|
1540
|
+
com: ['compiler', :contributor],
|
1541
|
+
con: ['consultant', :contributor],
|
1542
|
+
cov: ['cover designer', :contributor],
|
1543
|
+
cph: ['copyright holder', :rightsholder],
|
1544
|
+
cre: ['creator', :creator],
|
1545
|
+
csp: ['project manager', :contributor],
|
1546
|
+
ctb: ['contributor', :contributor],
|
1547
|
+
ctg: ['cartographer', :contributor],
|
1548
|
+
cur: ['curator', :contributor],
|
1549
|
+
dgg: ['degree grantor', :contributor],
|
1550
|
+
dnc: ['dancer', :contributor],
|
1551
|
+
dsr: ['designer', :contributor],
|
1552
|
+
dte: ['dedicatee', :contributor],
|
1553
|
+
eda: ['editor assistant', :contributor],
|
1554
|
+
edc: ['editor in chief', :creator],
|
1555
|
+
ede: ['final editing', :creator],
|
1556
|
+
edt: ['editor', :creator],
|
1557
|
+
egr: ['engraver', :contributor],
|
1558
|
+
eim: ['editor of image', :contributor],
|
1559
|
+
eow: ['editor original work', :contributor],
|
1560
|
+
etc: ['etcher', :contributor],
|
1561
|
+
eul: ['eulogist, drempeldichter, panégyriste', :contributor],
|
1562
|
+
hnr: ['honoree', :contributor],
|
1563
|
+
itr: ['instrumentalist', :contributor],
|
1564
|
+
ltg: ['lithographer', :contributor],
|
1565
|
+
mus: ['musician', :contributor],
|
1566
|
+
ogz: ['started by', :creator],
|
1567
|
+
oqz: ['continued by', :creator],
|
1568
|
+
ori: ['org. institute (rare books/mss only)', :contributor],
|
1569
|
+
orm: ['organizer of meeting', :contributor],
|
1570
|
+
oth: ['other', :contributor],
|
1571
|
+
pat: ['patron', :contributor],
|
1572
|
+
pht: ['photographer', :creator],
|
1573
|
+
prf: ['performer', :contributor],
|
1574
|
+
pro: ['producer', :contributor],
|
1575
|
+
prt: ['printer', :publisher],
|
1576
|
+
pub: ['publication about', :subject],
|
1577
|
+
rea: ['realization', :contributor],
|
1578
|
+
rpt: ['reporter', :contributor],
|
1579
|
+
rpy: ['responsible party', :contributor],
|
1580
|
+
sad: ['scientific advice', :contributor],
|
1581
|
+
sco: ['scientific co-operator', :contributor],
|
1582
|
+
scp: ['scriptorium', :contributor],
|
1583
|
+
sng: ['singer', :contributor],
|
1584
|
+
spn: ['sponsor', :contributor],
|
1585
|
+
tec: ['technical direction', :contributor],
|
1586
|
+
trc: ['transcriber', :contributor],
|
1587
|
+
trl: ['translator', :contributor],
|
1588
|
+
udr: ['under direction of', :contributor],
|
1589
|
+
voc: ['vocalist', :contributor],
|
1590
|
+
},
|
1591
|
+
'711' => {
|
1592
|
+
oth: ['other', :contributor],
|
1593
|
+
},
|
1594
|
+
'100' => {
|
1595
|
+
arr: ['arranger', :contributor],
|
1596
|
+
aut: ['author', :creator],
|
1597
|
+
cmp: ['composer', :contributor],
|
1598
|
+
com: ['compiler', :contributor],
|
1599
|
+
cre: ['creator', :creator],
|
1600
|
+
ctg: ['cartographer', :creator],
|
1601
|
+
ill: ['illustrator', :contributor],
|
1602
|
+
ivr: ['interviewer', :contributor],
|
1603
|
+
lbt: ['librettist', :contributor],
|
1604
|
+
lyr: ['lyricist', :contributor],
|
1605
|
+
pht: ['photographer', :creator],
|
1606
|
+
}
|
1607
|
+
}
|
1608
|
+
|
1609
|
+
TAALCODES = {
|
1610
|
+
afr: 'af',
|
1611
|
+
ara: 'ar',
|
1612
|
+
chi: 'zh',
|
1613
|
+
cze: 'cs',
|
1614
|
+
dan: 'da',
|
1615
|
+
dum: 'dum',
|
1616
|
+
dut: 'nl',
|
1617
|
+
est: 'et',
|
1618
|
+
eng: 'en',
|
1619
|
+
fin: 'fi',
|
1620
|
+
fre: 'fr',
|
1621
|
+
frm: 'frm',
|
1622
|
+
ger: 'de',
|
1623
|
+
grc: 'grc',
|
1624
|
+
gre: 'el',
|
1625
|
+
hun: 'hu',
|
1626
|
+
fry: 'fy',
|
1627
|
+
ita: 'it',
|
1628
|
+
jpn: 'ja',
|
1629
|
+
lat: 'la',
|
1630
|
+
lav: 'lv',
|
1631
|
+
liv: 'lt',
|
1632
|
+
ltz: 'lb',
|
1633
|
+
mlt: 'mt',
|
1634
|
+
nor: 'no',
|
1635
|
+
pol: 'pl',
|
1636
|
+
por: 'pt',
|
1637
|
+
rus: 'ru',
|
1638
|
+
slo: 'sk',
|
1639
|
+
slv: 'sl',
|
1640
|
+
spa: 'es',
|
1641
|
+
swe: 'sv',
|
1642
|
+
tur: 'tr',
|
1643
|
+
ukr: 'uk',
|
1644
|
+
syc: '',
|
1645
|
+
syr: '',
|
1646
|
+
heb: '',
|
1647
|
+
cop: '',
|
1648
|
+
}
|
1649
|
+
|
1650
|
+
#noinspection RubyStringKeysInHashInspection
|
1651
|
+
BIBCODES = {
|
1652
|
+
'01' => 'K.U.Leuven',
|
1653
|
+
'02' => 'KADOC',
|
1654
|
+
'03' => 'BB(Boerenbond)/KBC',
|
1655
|
+
'04' => 'HUB',
|
1656
|
+
'05' => 'ACV',
|
1657
|
+
'06' => 'LIBAR',
|
1658
|
+
'07' => 'SHARE',
|
1659
|
+
'10' => 'BPB',
|
1660
|
+
'11' => 'VLP',
|
1661
|
+
'12' => 'TIFA',
|
1662
|
+
'13' => 'LESSIUS',
|
1663
|
+
'14' => 'SERV',
|
1664
|
+
'15' => 'ACBE',
|
1665
|
+
'16' => 'SLUCB',
|
1666
|
+
'17' => 'SLUCG',
|
1667
|
+
'18' => 'HUB',
|
1668
|
+
'19' => 'KHBO',
|
1669
|
+
'20' => 'FINBI',
|
1670
|
+
'21' => 'BIOET',
|
1671
|
+
'22' => 'LUKAS',
|
1672
|
+
'23' => 'KHM',
|
1673
|
+
'24' => 'Fonds',
|
1674
|
+
'25' => 'RBINS',
|
1675
|
+
'26' => 'RMCA',
|
1676
|
+
'27' => 'NBB',
|
1677
|
+
'28' => 'Pasteurinstituut',
|
1678
|
+
'29' => 'Vesalius',
|
1679
|
+
'30' => 'Lemmensinstituut',
|
1680
|
+
'31' => 'KHLIM',
|
1681
|
+
'32' => 'KATHO',
|
1682
|
+
'33' => 'KAHO',
|
1683
|
+
'34' => 'HUB',
|
1684
|
+
}
|
1685
|
+
|
1686
|
+
FMT = {
|
1687
|
+
BK: 'Books',
|
1688
|
+
SE: 'Continuing Resources',
|
1689
|
+
MU: 'Music',
|
1690
|
+
MP: 'Maps',
|
1691
|
+
VM: 'Visual Materials',
|
1692
|
+
AM: 'Audio Materials',
|
1693
|
+
CF: 'Computer Files',
|
1694
|
+
MX: 'Mixed Materials',
|
1695
|
+
}
|
1696
|
+
|
1697
|
+
end
|
1698
|
+
|
1699
|
+
end
|
1700
|
+
end
|
1701
|
+
end
|
1702
|
+
end
|