marc 0.1.2 → 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -35,3 +35,4 @@ require 'marc/writer'
35
35
  require 'marc/exception'
36
36
  require 'marc/xmlwriter'
37
37
  require 'marc/xmlreader'
38
+ require 'marc/dublincore'
@@ -0,0 +1,79 @@
1
+ module MARC
2
+
3
+ # A class for mapping MARC records to Dublin Core
4
+
5
+ class DublinCore
6
+
7
+ def self.map(record)
8
+ dc_hash = Hash.new
9
+ dc_hash['title'] = get_field_value(record['245']['a'])
10
+
11
+ # Creator
12
+ [100, 110, 111, 700, 710, 711, 720].each do |field|
13
+ dc_hash['creator'] ||= []
14
+ dc_hash['creator'] << get_field_value(record[field.to_s])
15
+ end
16
+
17
+ # Subject
18
+ [600, 610, 611, 630, 650, 653].each do |field|
19
+ dc_hash['subject'] ||= []
20
+ dc_hash['subject'] << get_field_value(record[field.to_s])
21
+ end
22
+
23
+ # Description
24
+ [500..599].each do |field|
25
+ next if [506, 530, 540, 546].include?(field)
26
+ dc_hash['description'] ||= []
27
+ dc_hash['description'] << get_field_value(record[field.to_s])
28
+ end
29
+
30
+ dc_hash['publisher'] = get_field_value(record['260']['a']['b']) rescue nil
31
+ dc_hash['date'] = get_field_value(record['260']['c']) rescue nil
32
+ dc_hash['type'] = get_field_value(record['655'])
33
+ dc_hash['format'] = get_field_value(record['856']['q']) rescue nil
34
+ dc_hash['identifier'] = get_field_value(record['856']['u']) rescue nil
35
+ dc_hash['source'] = get_field_value(record['786']['o']['t']) rescue nil
36
+ dc_hash['language'] = get_field_value(record['546'])
37
+
38
+ dc_hash['relation'] = []
39
+ dc_hash['relation'] << get_field_value(record['530'])
40
+ [760..787].each do |field|
41
+ dc_hash['relation'] << get_field_value(record[field.to_s]['o']['t']) rescue nil
42
+ end
43
+
44
+ [651, 752].each do |field|
45
+ dc_hash['coverage'] ||= []
46
+ dc_hash['coverage'] << get_field_value(record[field.to_s])
47
+ end
48
+
49
+ [506, 540].each do |field|
50
+ dc_hash['rights'] ||= []
51
+ dc_hash['rights'] << get_field_value(record[field.to_s])
52
+ end
53
+
54
+ dc_hash.keys.each do |key|
55
+ dc_hash[key].flatten! if dc_hash[key].respond_to?(:flatten!)
56
+ dc_hash[key].compact! if dc_hash[key].respond_to?(:compact!)
57
+ end
58
+
59
+ dc_hash
60
+ end
61
+
62
+ def self.get_field_value(field)
63
+ return if field.nil?
64
+
65
+ if !field.kind_of?(String) && field.respond_to?(:each)
66
+ values = []
67
+ field.each do |element|
68
+ values << get_field_value(element)
69
+ end
70
+ values
71
+ else
72
+ return field if field.kind_of?(String)
73
+ return field.value if field.respond_to?(:value)
74
+ end
75
+ end
76
+
77
+ end
78
+ end
79
+
@@ -91,6 +91,16 @@ module MARC
91
91
  return MARC::XMLWriter.encode(self)
92
92
  end
93
93
 
94
+ # Handy method for returning a hash mapping this records values
95
+ # to the Dublin Core.
96
+ #
97
+ # dc = record.to_dublin_core()
98
+ # print dc['title']
99
+
100
+ def to_dublin_core
101
+ return MARC::DublinCore.map(self)
102
+ end
103
+
94
104
  # Returns a string version of the record, suitable for printing
95
105
 
96
106
  def to_s
@@ -0,0 +1,14 @@
1
+ require 'test/unit'
2
+ require 'marc'
3
+
4
+ class DublinCoreTest < Test::Unit::TestCase
5
+
6
+ def test_mapping
7
+ reader = MARC::Reader.new('test/batch.dat')
8
+ reader.each do |record|
9
+ dc = record.to_dublin_core
10
+ assert dc['title'] == record['245']['a']
11
+ end
12
+ end
13
+
14
+ end
metadata CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.9.0
3
3
  specification_version: 1
4
4
  name: marc
5
5
  version: !ruby/object:Gem::Version
6
- version: 0.1.2
7
- date: 2006-12-21 00:00:00 -05:00
6
+ version: 0.1.3
7
+ date: 2007-01-02 00:00:00 -05:00
8
8
  summary: A ruby library for working with Machine Readable Cataloging
9
9
  require_paths:
10
10
  - lib
@@ -34,6 +34,7 @@ files:
34
34
  - lib/marc/constants.rb
35
35
  - lib/marc/controlfield.rb
36
36
  - lib/marc/datafield.rb
37
+ - lib/marc/dublincore.rb
37
38
  - lib/marc/exception.rb
38
39
  - lib/marc/reader.rb
39
40
  - lib/marc/record.rb
@@ -46,6 +47,7 @@ files:
46
47
  - test/one.dat
47
48
  - test/tc_controlfield.rb
48
49
  - test/tc_datafield.rb
50
+ - test/tc_dublincore.rb
49
51
  - test/tc_reader.rb
50
52
  - test/tc_record.rb
51
53
  - test/tc_subfield.rb