traject 0.9.1 → 0.10.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.travis.yml +7 -0
- data/Gemfile +5 -1
- data/README.md +65 -17
- data/bench/bench.rb +30 -0
- data/bin/traject +4 -169
- data/doc/batch_execution.md +177 -0
- data/doc/extending.md +182 -0
- data/doc/other_commands.md +49 -0
- data/doc/settings.md +6 -2
- data/lib/traject.rb +1 -0
- data/lib/traject/command_line.rb +296 -0
- data/lib/traject/debug_writer.rb +28 -0
- data/lib/traject/indexer.rb +84 -20
- data/lib/traject/indexer/settings.rb +9 -1
- data/lib/traject/json_writer.rb +15 -38
- data/lib/traject/line_writer.rb +59 -0
- data/lib/traject/macros/marc21.rb +10 -5
- data/lib/traject/macros/marc21_semantics.rb +57 -25
- data/lib/traject/marc4j_reader.rb +9 -26
- data/lib/traject/marc_extractor.rb +121 -48
- data/lib/traject/mock_reader.rb +87 -0
- data/lib/traject/mock_writer.rb +34 -0
- data/lib/traject/solrj_writer.rb +1 -22
- data/lib/traject/util.rb +107 -1
- data/lib/traject/version.rb +1 -1
- data/lib/traject/yaml_writer.rb +9 -0
- data/test/debug_writer_test.rb +38 -0
- data/test/indexer/each_record_test.rb +27 -2
- data/test/indexer/macros_marc21_semantics_test.rb +12 -1
- data/test/indexer/settings_test.rb +9 -2
- data/test/indexer/to_field_test.rb +35 -5
- data/test/marc4j_reader_test.rb +3 -0
- data/test/marc_extractor_test.rb +94 -20
- data/test/test_support/demo_config.rb +6 -3
- data/traject.gemspec +1 -2
- metadata +17 -20
@@ -49,33 +49,16 @@ class Traject::Marc4JReader
|
|
49
49
|
ensure_marc4j_loaded!
|
50
50
|
end
|
51
51
|
|
52
|
-
|
53
|
-
#
|
52
|
+
# Loads solrj unless it appears to already be loaded.
|
53
|
+
#
|
54
|
+
# Will load from settings['marc4j_reader.jar_dir'] if given, otherwise
|
55
|
+
# bundled vendor location.
|
56
|
+
#
|
57
|
+
# Will java_import MarcPermissiveStreamReader and MarcXmlReader so you
|
58
|
+
# have those available as un-namespaced classes.
|
54
59
|
def ensure_marc4j_loaded!
|
55
|
-
unless defined?(MarcPermissiveStreamReader)
|
56
|
-
|
57
|
-
|
58
|
-
tries = 0
|
59
|
-
begin
|
60
|
-
tries += 1
|
61
|
-
java_import org.marc4j.MarcPermissiveStreamReader
|
62
|
-
java_import org.marc4j.MarcXmlReader
|
63
|
-
rescue NameError => e
|
64
|
-
# /Users/jrochkind/code/solrj-gem/lib"
|
65
|
-
|
66
|
-
include_jar_dir = File.expand_path("../../vendor/marc4j/lib", File.dirname(__FILE__))
|
67
|
-
|
68
|
-
jardir = settings["marc4j_reader.jar_dir"] || include_jar_dir
|
69
|
-
Dir.glob("#{jardir}/*.jar") do |x|
|
70
|
-
require x
|
71
|
-
end
|
72
|
-
|
73
|
-
if tries > 1
|
74
|
-
raise LoadError.new("Can not find Marc4J java classes")
|
75
|
-
else
|
76
|
-
retry
|
77
|
-
end
|
78
|
-
end
|
60
|
+
unless defined?(MarcPermissiveStreamReader) && defined?(MarcXmlReader)
|
61
|
+
Traject::Util.require_marc4j_jars(settings)
|
79
62
|
end
|
80
63
|
end
|
81
64
|
|
@@ -1,5 +1,3 @@
|
|
1
|
-
|
2
|
-
|
3
1
|
module Traject
|
4
2
|
# MarcExtractor is a class for extracting lists of strings from a MARC::Record,
|
5
3
|
# according to specifications. See #parse_string_spec for description of string
|
@@ -8,28 +6,36 @@ module Traject
|
|
8
6
|
#
|
9
7
|
# Examples:
|
10
8
|
#
|
11
|
-
# array_of_stuff = MarcExtractor.new(
|
12
|
-
# values = MarcExtractor.new(
|
9
|
+
# array_of_stuff = MarcExtractor.new("001:245abc:700a").extract(marc_record)
|
10
|
+
# values = MarcExtractor.new("040a", :seperator => nil).extract(marc_record)
|
11
|
+
#
|
12
|
+
#
|
13
|
+
# == Note on Performance and MarcExtractor creation and reuse
|
14
|
+
#
|
15
|
+
# A MarcExtractor is somewhat expensive to create, and has been shown in profiling/
|
16
|
+
# benchmarking to be a bottleneck if you end up creating one for each marc record
|
17
|
+
# processed. Instead, a single MarcExtractor should be created, and re-used
|
18
|
+
# per MARC record.
|
19
|
+
#
|
20
|
+
# If you are creating a traject 'macro' method, here's one way to do that,
|
21
|
+
# capturing the MarcExtractor under closure:
|
13
22
|
#
|
23
|
+
# def some_macro(spec, other_args, whatever)
|
24
|
+
# extractor = MarcExtractor.new( spec )
|
25
|
+
# # ...
|
26
|
+
# return lambda do |record, accumulator, context|
|
27
|
+
# #...
|
28
|
+
# accumulator.concat extractor.extract(record)
|
29
|
+
# #...
|
30
|
+
# end
|
31
|
+
# end
|
32
|
+
#
|
33
|
+
# In other cases, you may find it convenient to improve performance by
|
34
|
+
# using the MarcExtractor#cached method, instead of MarcExtractor#new, to
|
35
|
+
# lazily create and then re-use a MarcExtractor object with
|
36
|
+
# particular initialization arguments.
|
14
37
|
class MarcExtractor
|
15
|
-
attr_accessor :options, :
|
16
|
-
|
17
|
-
|
18
|
-
# Convenience method to construct a MarcExtractor object and
|
19
|
-
# run extract on it.
|
20
|
-
#
|
21
|
-
# First arg is a marc record.
|
22
|
-
#
|
23
|
-
# Second arg is either a string that will be given to parse_string_spec,
|
24
|
-
# OR a hash that's the return value of parse_string_spec.
|
25
|
-
#
|
26
|
-
# Third arg is an optional options hash that will be passed as
|
27
|
-
# third arg of MarcExtractor constructor.
|
28
|
-
def self.extract_by_spec(marc_record, specification, options = {})
|
29
|
-
(raise ArgumentError, "first argument must not be nil") if marc_record.nil?
|
30
|
-
|
31
|
-
Traject::MarcExtractor.new(marc_record, specification, options).extract
|
32
|
-
end
|
38
|
+
attr_accessor :options, :spec_hash
|
33
39
|
|
34
40
|
# Take a hash that's the output of #parse_string_spec, return
|
35
41
|
# an array of strings extracted from a marc record accordingly
|
@@ -47,21 +53,71 @@ module Traject
|
|
47
53
|
# that match spec. Also:
|
48
54
|
# * false => do not include.
|
49
55
|
# * :only => only include linked 880s, not original
|
50
|
-
def initialize(
|
56
|
+
def initialize(spec, options = {})
|
51
57
|
self.options = {
|
52
58
|
:seperator => ' ',
|
53
59
|
:alternate_script => :include
|
54
60
|
}.merge(options)
|
55
61
|
|
56
|
-
self.marc_record = marc_record
|
57
|
-
|
58
62
|
self.spec_hash = spec.kind_of?(Hash) ? spec : self.class.parse_string_spec(spec)
|
63
|
+
|
64
|
+
|
65
|
+
# Tags are "interesting" if we have a spec that might cover it
|
66
|
+
@interesting_tags_hash = {}
|
67
|
+
|
68
|
+
# By default, interesting tags are those represented by keys in spec_hash.
|
69
|
+
# Add them unless we only care about alternate scripts.
|
70
|
+
unless options[:alternate_script] == :only
|
71
|
+
self.spec_hash.keys.each {|tag| @interesting_tags_hash[tag] = true}
|
72
|
+
end
|
73
|
+
|
74
|
+
# If we *are* interested in alternate scripts, add the 880
|
75
|
+
if options[:alternate_script] != false
|
76
|
+
@interesting_tags_hash['880'] = true
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
# Takes the same arguments as MarcExtractor.new, but will re-use an existing
|
81
|
+
# cached MarcExtractor already created with given initialization arguments,
|
82
|
+
# if available.
|
83
|
+
#
|
84
|
+
# This can be used to increase performance of indexing routines, as
|
85
|
+
# MarcExtractor creation has been shown via profiling/benchmarking
|
86
|
+
# to be expensive.
|
87
|
+
#
|
88
|
+
# Cache is thread-local, so should be thread-safe.
|
89
|
+
#
|
90
|
+
# You should _not_ modify the state of any MarcExtractor retrieved
|
91
|
+
# via cached, as the MarcExtractor will be re-used and shared (possibly
|
92
|
+
# between threads even!). We try to use ruby #freeze to keep you from doing so,
|
93
|
+
# although if you try hard enough you can surely find a way to do something
|
94
|
+
# you shouldn't.
|
95
|
+
#
|
96
|
+
# extractor = MarcExtractor.cached("245abc:700a", :seperator => nil)
|
97
|
+
def self.cached(*args)
|
98
|
+
cache = (Thread.current[:marc_extractor_cached] ||= Hash.new)
|
99
|
+
extractor = (cache[args] ||= begin
|
100
|
+
ex = Traject::MarcExtractor.new(*args).freeze
|
101
|
+
ex.options.freeze
|
102
|
+
ex.spec_hash.freeze
|
103
|
+
ex
|
104
|
+
end)
|
105
|
+
|
106
|
+
return extractor
|
59
107
|
end
|
60
108
|
|
109
|
+
# Check to see if a tag is interesting (meaning it may be covered by a spec
|
110
|
+
# and the passed-in options about alternate scripts)
|
111
|
+
|
112
|
+
def interesting_tag?(tag)
|
113
|
+
return @interesting_tags_hash.include?(tag)
|
114
|
+
end
|
115
|
+
|
116
|
+
|
61
117
|
# Converts from a string marc spec like "245abc:700a" to a nested hash used internally
|
62
118
|
# to represent the specification.
|
63
119
|
#
|
64
|
-
# a String specification is a string of form:
|
120
|
+
# a String specification is a string (or array of strings) of form:
|
65
121
|
# {tag}{|indicators|}{subfields} seperated by colons
|
66
122
|
# tag is three chars (usually but not neccesarily numeric),
|
67
123
|
# indicators are optional two chars prefixed by hyphen,
|
@@ -93,8 +149,9 @@ module Traject
|
|
93
149
|
# See tests for more examples.
|
94
150
|
def self.parse_string_spec(spec_string)
|
95
151
|
hash = {}
|
152
|
+
spec_strings = spec_string.is_a?(Array) ? spec_string.map{|s| s.split(/\s*:\s*/)}.flatten : spec_string.split(/s*:\s*/)
|
96
153
|
|
97
|
-
|
154
|
+
spec_strings.each do |part|
|
98
155
|
if (part =~ /\A([a-zA-Z0-9]{3})(\|([a-z0-9\ \*]{2})\|)?([a-z0-9]*)?\Z/)
|
99
156
|
# variable field
|
100
157
|
tag, indicators, subfields = $1, $3, $4
|
@@ -129,10 +186,10 @@ module Traject
|
|
129
186
|
|
130
187
|
|
131
188
|
# Returns array of strings, extracted values. Maybe empty array.
|
132
|
-
def extract
|
189
|
+
def extract(marc_record)
|
133
190
|
results = []
|
134
191
|
|
135
|
-
self.each_matching_line do |field, spec|
|
192
|
+
self.each_matching_line(marc_record) do |field, spec|
|
136
193
|
if control_field?(field)
|
137
194
|
results << (spec[:bytes] ? field.value.byteslice(spec[:bytes]) : field.value)
|
138
195
|
else
|
@@ -150,9 +207,17 @@ module Traject
|
|
150
207
|
#
|
151
208
|
# Third (optional) arg to block is self, the MarcExtractor object, useful for custom
|
152
209
|
# implementations.
|
153
|
-
def each_matching_line
|
154
|
-
|
155
|
-
|
210
|
+
def each_matching_line(marc_record)
|
211
|
+
marc_record.fields(@interesting_tags_hash.keys).each do |field|
|
212
|
+
|
213
|
+
spec = spec_covering_field(field)
|
214
|
+
|
215
|
+
# Don't have a spec that addresses this field? Move on.
|
216
|
+
next unless spec
|
217
|
+
|
218
|
+
# Make sure it matches indicators too, spec_covering_field
|
219
|
+
# doens't check that.
|
220
|
+
if matches_indicators(field, spec)
|
156
221
|
yield(field, spec, self)
|
157
222
|
end
|
158
223
|
end
|
@@ -162,9 +227,9 @@ module Traject
|
|
162
227
|
# but collects results of block into an array -- flattens any subarrays for you!
|
163
228
|
#
|
164
229
|
# Useful for re-use of this class for custom processing
|
165
|
-
def collect_matching_lines
|
230
|
+
def collect_matching_lines(marc_record)
|
166
231
|
results = []
|
167
|
-
self.each_matching_line do |field, spec, extractor|
|
232
|
+
self.each_matching_line(marc_record) do |field, spec, extractor|
|
168
233
|
results.concat [yield(field, spec, extractor)].flatten
|
169
234
|
end
|
170
235
|
return results
|
@@ -187,24 +252,32 @@ module Traject
|
|
187
252
|
return options[:seperator] ? [ subfields.join( options[:seperator]) ] : subfields
|
188
253
|
end
|
189
254
|
|
190
|
-
|
191
|
-
#
|
192
|
-
#
|
193
|
-
#
|
194
|
-
#
|
195
|
-
#
|
255
|
+
|
256
|
+
# Find a spec, if any, covering extraction from this field
|
257
|
+
#
|
258
|
+
# When given an 880, will return the spec (if any) for the linked tag iff
|
259
|
+
# we have a $6 and we want the alternate script.
|
260
|
+
#
|
261
|
+
# Returns nil if no matching spec is found
|
262
|
+
|
196
263
|
def spec_covering_field(field)
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
264
|
+
tag = field.tag
|
265
|
+
|
266
|
+
# Short-circuit the unintersting stuff
|
267
|
+
return nil unless interesting_tag?(tag)
|
268
|
+
|
269
|
+
# Due to bug in jruby https://github.com/jruby/jruby/issues/886 , we need
|
270
|
+
# to do this weird encode gymnastics, which fixes it for mysterious reasons.
|
271
|
+
|
272
|
+
if tag == "880" && field['6']
|
273
|
+
tag = field["6"].encode(field["6"].encoding).byteslice(0,3)
|
205
274
|
end
|
275
|
+
|
276
|
+
# Take the resulting tag and get the spec from it (or the default nil if there isn't a spec for this tag)
|
277
|
+
spec = self.spec_hash[tag]
|
206
278
|
end
|
207
279
|
|
280
|
+
|
208
281
|
def control_field?(field)
|
209
282
|
# should the MARC gem have a more efficient way to do this,
|
210
283
|
# define #control_field? on both ControlField and DataField?
|
@@ -0,0 +1,87 @@
|
|
1
|
+
# Encoding: utf-8
|
2
|
+
require 'marc'
|
3
|
+
require 'json'
|
4
|
+
module Traject
|
5
|
+
|
6
|
+
# A mock reader, designed to do almost no work during a run to provide better benchmarking
|
7
|
+
#
|
8
|
+
# It pulls in 20 records from the end of this file and then just returns
|
9
|
+
# them over and over again, up to the specified limit
|
10
|
+
#
|
11
|
+
# Specify in a config files as follows:
|
12
|
+
#
|
13
|
+
# require 'traject/mock_writer'
|
14
|
+
# require 'traject/mock_reader'
|
15
|
+
#
|
16
|
+
# settings do
|
17
|
+
# store "reader_class_name", "Traject::MockReader"
|
18
|
+
# store "writer_class_name", "Traject::MockWriter"
|
19
|
+
# store "mock_reader.limit", 4_000 # default is 10_000
|
20
|
+
# end
|
21
|
+
|
22
|
+
class MockReader
|
23
|
+
|
24
|
+
attr_accessor :limit
|
25
|
+
|
26
|
+
# @param [Ignored] input_stream (ignored)
|
27
|
+
# @param [Hash] settings (looks only for an integer in 'mock_reader.limit')
|
28
|
+
def initialize(input_stream, settings = {})
|
29
|
+
@records = []
|
30
|
+
@limit = settings["mock_reader.limit"] || 10_000
|
31
|
+
|
32
|
+
this_file_iter = File.open(__FILE__).each_line
|
33
|
+
|
34
|
+
while true
|
35
|
+
line = this_file_iter.next
|
36
|
+
break if line =~ /^\_\_END\_\_/
|
37
|
+
end
|
38
|
+
|
39
|
+
begin
|
40
|
+
while true
|
41
|
+
json = this_file_iter.next
|
42
|
+
next unless json =~ /\S/
|
43
|
+
@records << MARC::Record.new_from_hash(JSON.parse(json))
|
44
|
+
end
|
45
|
+
rescue StopIteration
|
46
|
+
end
|
47
|
+
|
48
|
+
end
|
49
|
+
|
50
|
+
|
51
|
+
def each
|
52
|
+
unless block_given?
|
53
|
+
enum_for(:each)
|
54
|
+
else
|
55
|
+
size = @records.size
|
56
|
+
@limit.times do |i|
|
57
|
+
yield @records[i % size]
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
__END__
|
67
|
+
{"leader":"01195nam a22004331 4500","fields":[{"001":"000001580"},{"003":"MiU"},{"005":"19880715000000.0"},{"006":"m d "},{"007":"cr bn ---auaua"},{"008":"880715s1970 enk |00100 eng "},{"010":{"ind1":" ","ind2":" ","subfields":[{"a":"74120936"}]}},{"015":{"ind1":" ","ind2":" ","subfields":[{"a":"B70-19354"}]}},{"020":{"ind1":" ","ind2":" ","subfields":[{"a":"0631126902"},{"c":"45/-"}]}},{"035":{"ind1":" ","ind2":" ","subfields":[{"a":"(RLIN)MIUG0113131-B"}]}},{"035":{"ind1":" ","ind2":" ","subfields":[{"a":"(CaOTULAS)159819858"}]}},{"035":{"ind1":" ","ind2":" ","subfields":[{"a":"(OCoLC)ocm00113131"}]}},{"035":{"ind1":" ","ind2":" ","subfields":[{"a":"sdr-wu1874523"}]}},{"040":{"ind1":" ","ind2":" ","subfields":[{"a":"DLC"},{"c":"DLC"},{"d":"MiU"}]}},{"043":{"ind1":" ","ind2":" ","subfields":[{"a":"e-uk---"}]}},{"050":{"ind1":" ","ind2":"4","subfields":[{"a":"HD1491.G7"},{"b":"D521 1970"}]}},{"082":{"ind1":" ","ind2":" ","subfields":[{"a":"334/.683/0917242"}]}},{"100":{"ind1":"1","ind2":" ","subfields":[{"a":"Digby, Margaret,"},{"d":"1902-"}]}},{"245":{"ind1":"1","ind2":"0","subfields":[{"a":"Agricultural co-operation in the Commonwealth."}]}},{"250":{"ind1":" ","ind2":" ","subfields":[{"a":"2nd ed."}]}},{"260":{"ind1":" ","ind2":" ","subfields":[{"a":"Oxford,"},{"b":"Blackwell,"},{"c":"1970."}]}},{"300":{"ind1":" ","ind2":" ","subfields":[{"a":"[1], vii, 222 p."},{"c":"23 cm."}]}},{"538":{"ind1":" ","ind2":" ","subfields":[{"a":"Mode of access: Internet."}]}},{"650":{"ind1":" ","ind2":"0","subfields":[{"a":"Agriculture, Cooperative"},{"z":"Great Britain"},{"x":"Colonies."}]}},{"852":{"ind1":"0","ind2":" ","subfields":[{"a":"MiU"},{"b":"BUHR"},{"c":"GRAD"},{"h":"HD1491.G7 D521 1970"}]}},{"852":{"ind1":" ","ind2":" ","subfields":[{"a":"wu"},{"b":"SDR"},{"c":"WU"}]}},{"970":{"ind1":" ","ind2":" ","subfields":[{"a":"BK"},{"b":"Book"}]}},{"971":{"ind1":" ","ind2":" ","subfields":[{"a":"MiU"}]}},{"972":{"ind1":" ","ind2":" ","subfields":[{"c":"20040625"}]}},{"973":{"ind1":" ","ind2":" ","subfields":[{"a":"HT"},{"b":"avail_ht"}]}},{"973":{"ind1":" ","ind2":" ","subfields":[{"a":"AC"},{"b":"avail_circ"}]}},{"974":{"ind1":" ","ind2":" ","subfields":[{"u":"mdp.39015030215993"},{"r":"ic"},{"d":"20120530"}]}},{"974":{"ind1":" ","ind2":" ","subfields":[{"u":"wu.89041950478"},{"r":"ic"},{"d":"20120529"}]}},{"998":{"ind1":" ","ind2":" ","subfields":[{"s":"9665"}]}}]}
|
68
|
+
{"leader":"01444nam a22004571 4500","fields":[{"001":"000001646"},{"003":"MiU"},{"005":"19880715000000.0"},{"006":"m d "},{"007":"cr bn ---auaua"},{"008":"880715s1969 onc b 00110 eng "},{"010":{"ind1":" ","ind2":" ","subfields":[{"a":"75520445"}]}},{"015":{"ind1":" ","ind2":" ","subfields":[{"a":"C***"}]}},{"035":{"ind1":" ","ind2":" ","subfields":[{"a":"(RLIN)MIUG0117360-B"}]}},{"035":{"ind1":" ","ind2":" ","subfields":[{"a":"(CaOTULAS)159819933"}]}},{"035":{"ind1":" ","ind2":" ","subfields":[{"a":"(OCoLC)ocm00117360"}]}},{"035":{"ind1":" ","ind2":" ","subfields":[{"a":"sdr-nrlf-ucscb16742595x"}]}},{"040":{"ind1":" ","ind2":" ","subfields":[{"a":"DLC"},{"c":"DLC"},{"d":"MiU"}]}},{"041":{"ind1":"1","ind2":" ","subfields":[{"a":"eng"},{"h":"lat"}]}},{"050":{"ind1":"0","ind2":" ","subfields":[{"a":"PA8395.P36"},{"b":"D513"}]}},{"082":{"ind1":" ","ind2":" ","subfields":[{"a":"398.2/0917/4927"}]}},{"100":{"ind1":"0","ind2":" ","subfields":[{"a":"Petrus Alfonsi,"},{"d":"1062-1110?"}]}},{"240":{"ind1":"1","ind2":"0","subfields":[{"a":"Disciplina Clericalis."},{"l":"English"}]}},{"245":{"ind1":"1","ind2":"4","subfields":[{"a":"The scholar's guide."},{"b":"A translation of the twelfth-century Disciplina Clericalis of Pedro Alfonso,"},{"c":"by Joseph Ramon Jones and John Esten Keller."}]}},{"260":{"ind1":" ","ind2":" ","subfields":[{"a":"Toronto,"},{"b":"Pontifical Institute of Mediaeval Studies,"},{"c":"1969."}]}},{"300":{"ind1":" ","ind2":" ","subfields":[{"a":"117 p."},{"c":"20 cm."}]}},{"504":{"ind1":" ","ind2":" ","subfields":[{"a":"Includes bibliographical references."}]}},{"538":{"ind1":" ","ind2":" ","subfields":[{"a":"Mode of access: Internet."}]}},{"700":{"ind1":"1","ind2":" ","subfields":[{"a":"Jones, Joseph Ramon,"},{"d":"1935-"}]}},{"700":{"ind1":"1","ind2":" ","subfields":[{"a":"Keller, John Esten,"},{"e":"ed."}]}},{"852":{"ind1":"0","ind2":" ","subfields":[{"a":"MiU"},{"b":"HATCH"},{"c":"GRAD"},{"h":"PA8395.P48 D63 1969"}]}},{"852":{"ind1":"0","ind2":" ","subfields":[{"a":"MiU"},{"b":"HATCH"},{"c":"GRAD"},{"h":"PA8395.P48 D63 1969"}]}},{"970":{"ind1":" ","ind2":" ","subfields":[{"a":"BK"},{"b":"Book"}]}},{"971":{"ind1":" ","ind2":" ","subfields":[{"a":"MiU"}]}},{"972":{"ind1":" ","ind2":" ","subfields":[{"c":"20040625"}]}},{"972":{"ind1":" ","ind2":" ","subfields":[{"c":"20040625"}]}},{"973":{"ind1":" ","ind2":" ","subfields":[{"a":"HT"},{"b":"avail_ht"}]}},{"973":{"ind1":" ","ind2":" ","subfields":[{"a":"AC"},{"b":"avail_circ"}]}},{"974":{"ind1":" ","ind2":" ","subfields":[{"u":"mdp.39015005879807"},{"r":"ic"},{"d":"20120530"}]}},{"974":{"ind1":" ","ind2":" ","subfields":[{"u":"mdp.39015011292607"},{"r":"ic"},{"d":"20120530"}]}},{"998":{"ind1":" ","ind2":" ","subfields":[{"c":"SEP"},{"s":"9115"}]}}]}
|
69
|
+
{"leader":"01217nam a22004331 4500","fields":[{"001":"000001659"},{"003":"MiU"},{"005":"19880715000000.0"},{"006":"m d "},{"007":"cr bn ---auaua"},{"008":"880715s1969 nyu b 00110 eng "},{"010":{"ind1":" ","ind2":" ","subfields":[{"a":"69019912"}]}},{"020":{"ind1":" ","ind2":" ","subfields":[{"a":"0030771153"}]}},{"035":{"ind1":" ","ind2":" ","subfields":[{"a":"(RLIN)MIUG0118050-B"}]}},{"035":{"ind1":" ","ind2":" ","subfields":[{"a":"(CaOTULAS)159819948"}]}},{"035":{"ind1":" ","ind2":" ","subfields":[{"a":"(OCoLC)ocm00118050"}]}},{"035":{"ind1":" ","ind2":" ","subfields":[{"a":"sdr-nrlf.b146119964"}]}},{"040":{"ind1":" ","ind2":" ","subfields":[{"a":"DLC"},{"c":"DLC"},{"d":"MiU"}]}},{"050":{"ind1":"0","ind2":" ","subfields":[{"a":"P291"},{"b":".C58"}]}},{"082":{"ind1":" ","ind2":" ","subfields":[{"a":"415"}]}},{"100":{"ind1":"1","ind2":" ","subfields":[{"a":"Cook, Walter Anthony,"},{"d":"1922-"}]}},{"245":{"ind1":"1","ind2":"0","subfields":[{"a":"Introduction to tagmemic analysis"},{"c":"[by] Walter A. Cook."}]}},{"260":{"ind1":" ","ind2":" ","subfields":[{"a":"New York,"},{"b":"Holt, Rinehart and Winston"},{"c":"[1969]"}]}},{"300":{"ind1":" ","ind2":" ","subfields":[{"a":"viii, 210 p."},{"c":"23 cm."}]}},{"490":{"ind1":"0","ind2":" ","subfields":[{"a":"Transatlantic series in linguistics"}]}},{"504":{"ind1":" ","ind2":" ","subfields":[{"a":"Bibliography: p. 200-204."}]}},{"538":{"ind1":" ","ind2":" ","subfields":[{"a":"Mode of access: Internet."}]}},{"650":{"ind1":" ","ind2":"0","subfields":[{"a":"Tagmemics"}]}},{"852":{"ind1":"0","ind2":" ","subfields":[{"a":"MiU"},{"b":"BUHR"},{"c":"GRAD"},{"h":"P 160 .C77 1969"}]}},{"852":{"ind1":"0","ind2":" ","subfields":[{"a":"MiU"},{"b":"HATCH"},{"c":"GRAD"},{"h":"P 160 .C77 1969"}]}},{"970":{"ind1":" ","ind2":" ","subfields":[{"a":"BK"},{"b":"Book"}]}},{"971":{"ind1":" ","ind2":" ","subfields":[{"a":"MiU"}]}},{"972":{"ind1":" ","ind2":" ","subfields":[{"c":"20040625"}]}},{"972":{"ind1":" ","ind2":" ","subfields":[{"c":"20040625"}]}},{"973":{"ind1":" ","ind2":" ","subfields":[{"a":"HT"},{"b":"avail_ht"}]}},{"973":{"ind1":" ","ind2":" ","subfields":[{"a":"AC"},{"b":"avail_circ"}]}},{"974":{"ind1":" ","ind2":" ","subfields":[{"u":"mdp.39015013397750"},{"r":"ic"},{"d":"20120530"}]}},{"974":{"ind1":" ","ind2":" ","subfields":[{"u":"mdp.39015030740339"},{"r":"ic"}]}},{"998":{"ind1":" ","ind2":" ","subfields":[{"s":"9665"}]}}]}
|
70
|
+
{"leader":"00937nam a22003491 4500","fields":[{"001":"000003028"},{"003":"MiU"},{"005":"19880715000000.0"},{"006":"m d "},{"007":"cr bn ---auaua"},{"008":"880715s1971 nyu |00011 eng "},{"010":{"ind1":" ","ind2":" ","subfields":[{"a":"78156496"}]}},{"035":{"ind1":" ","ind2":" ","subfields":[{"a":"(RLIN)MIUG0208418-B"}]}},{"035":{"ind1":" ","ind2":" ","subfields":[{"a":"(CaOTULAS)159821539"}]}},{"035":{"ind1":" ","ind2":" ","subfields":[{"a":"(OCoLC)ocm00208418"}]}},{"040":{"ind1":" ","ind2":" ","subfields":[{"a":"DLC"},{"c":"DLC"},{"d":"MiU"}]}},{"050":{"ind1":"0","ind2":" ","subfields":[{"a":"PZ3.V398"},{"b":"Mo"},{"a":"PS3543.A67"}]}},{"082":{"ind1":" ","ind2":" ","subfields":[{"a":"813/.5/2"}]}},{"100":{"ind1":"1","ind2":" ","subfields":[{"a":"Varandyan, Emmanuel P."}]}},{"245":{"ind1":"1","ind2":"4","subfields":[{"a":"The Moon sails;"},{"b":"a novel,"},{"c":"by Emmanuel P. Varandyan."}]}},{"250":{"ind1":" ","ind2":" ","subfields":[{"a":"[1st ed.]"}]}},{"260":{"ind1":" ","ind2":" ","subfields":[{"a":"Delmar, N.Y.,"},{"b":"Pinnacle,"},{"c":"1971."}]}},{"300":{"ind1":" ","ind2":" ","subfields":[{"a":"251 p."},{"c":"24 cm."}]}},{"538":{"ind1":" ","ind2":" ","subfields":[{"a":"Mode of access: Internet."}]}},{"852":{"ind1":"1","ind2":" ","subfields":[{"a":"MiU"},{"b":"BUHR"},{"c":"GRAD"},{"h":"828 V288mn, 1971"}]}},{"970":{"ind1":" ","ind2":" ","subfields":[{"a":"BK"},{"b":"Book"}]}},{"971":{"ind1":" ","ind2":" ","subfields":[{"a":"MiU"}]}},{"972":{"ind1":" ","ind2":" ","subfields":[{"c":"20040625"}]}},{"973":{"ind1":" ","ind2":" ","subfields":[{"a":"HT"},{"b":"avail_ht"}]}},{"973":{"ind1":" ","ind2":" ","subfields":[{"a":"AC"},{"b":"avail_circ"}]}},{"974":{"ind1":" ","ind2":" ","subfields":[{"u":"mdp.39015030715380"},{"r":"ic"},{"d":"20120530"}]}},{"998":{"ind1":" ","ind2":" ","subfields":[{"s":"9665"}]}}]}
|
71
|
+
{"leader":"01141nam a22004091 4500","fields":[{"001":"000003441"},{"003":"MiU"},{"005":"19880715000000.0"},{"006":"m d "},{"007":"cr bn ---auaua"},{"008":"880715c19681967pau |00000 eng "},{"010":{"ind1":" ","ind2":" ","subfields":[{"a":"68010619"}]}},{"035":{"ind1":" ","ind2":" ","subfields":[{"a":"(RLIN)MIUG0237566-B"}]}},{"035":{"ind1":" ","ind2":" ","subfields":[{"a":"(CaOTULAS)159822019"}]}},{"035":{"ind1":" ","ind2":" ","subfields":[{"a":"(OCoLC)ocm00237566"}]}},{"035":{"ind1":" ","ind2":" ","subfields":[{"a":"sdr-nrlf-ucscb167381271"}]}},{"040":{"ind1":" ","ind2":" ","subfields":[{"a":"DLC"},{"c":"DLC"},{"d":"MiU"}]}},{"050":{"ind1":"0","ind2":" ","subfields":[{"a":"HE2751"},{"b":".L9"}]}},{"082":{"ind1":" ","ind2":" ","subfields":[{"a":"385/.0973"}]}},{"100":{"ind1":"1","ind2":" ","subfields":[{"a":"Lyon, Peter,"},{"d":"1915-"}]}},{"245":{"ind1":"1","ind2":"0","subfields":[{"a":"To hell in a day coach;"},{"b":"an exasperated look at American railroads."}]}},{"250":{"ind1":" ","ind2":" ","subfields":[{"a":"[1st ed.]"}]}},{"260":{"ind1":" ","ind2":" ","subfields":[{"a":"Philadelphia,"},{"b":"Lippincott,"},{"c":"1968 [c1967]"}]}},{"300":{"ind1":" ","ind2":" ","subfields":[{"a":"vii, 324 p."},{"c":"22 cm."}]}},{"538":{"ind1":" ","ind2":" ","subfields":[{"a":"Mode of access: Internet."}]}},{"650":{"ind1":" ","ind2":"0","subfields":[{"a":"Railroads"},{"z":"United States"}]}},{"852":{"ind1":"0","ind2":" ","subfields":[{"a":"MiU"},{"b":"SPEC"},{"c":"RARE"},{"h":"HE 2751 .L98"}]}},{"852":{"ind1":"0","ind2":" ","subfields":[{"a":"MiU"},{"b":"SPEC"},{"c":"THC"},{"h":"HE 2751 .L98"}]}},{"852":{"ind1":" ","ind2":" ","subfields":[{"a":"uc1"},{"b":"SDR"},{"c":"NRLF"}]}},{"970":{"ind1":" ","ind2":" ","subfields":[{"a":"BK"},{"b":"Book"}]}},{"971":{"ind1":" ","ind2":" ","subfields":[{"a":"MiU"}]}},{"972":{"ind1":" ","ind2":" ","subfields":[{"c":"20040625"}]}},{"972":{"ind1":" ","ind2":" ","subfields":[{"c":"20040625"}]}},{"973":{"ind1":" ","ind2":" ","subfields":[{"a":"HT"},{"b":"avail_ht"}]}},{"974":{"ind1":" ","ind2":" ","subfields":[{"u":"mdp.39015023095238"},{"r":"ic"},{"d":"20120530"}]}},{"974":{"ind1":" ","ind2":" ","subfields":[{"u":"uc1.b4912198"},{"r":"ic"},{"d":"20111204"}]}},{"998":{"ind1":" ","ind2":" ","subfields":[{"s":"9665"}]}}]}
|
72
|
+
{"leader":"01692nam a22005291 4500","fields":[{"001":"000003823"},{"003":"MiU"},{"005":"19880715000000.0"},{"006":"m d "},{"007":"cr bn ---auaua"},{"008":"880715s1967 nyu b 00010 eng "},{"010":{"ind1":" ","ind2":" ","subfields":[{"a":"67025457"}]}},{"035":{"ind1":" ","ind2":" ","subfields":[{"a":"(RLIN)MIUG0264219-B"}]}},{"035":{"ind1":" ","ind2":" ","subfields":[{"a":"(CaOTULAS)159822454"}]}},{"035":{"ind1":" ","ind2":" ","subfields":[{"a":"(OCoLC)ocm00264219"}]}},{"035":{"ind1":" ","ind2":" ","subfields":[{"a":"sdr-nrlfGLAD187507-B"}]}},{"040":{"ind1":" ","ind2":" ","subfields":[{"a":"DLC"},{"c":"DLC"},{"d":"MiU"}]}},{"043":{"ind1":" ","ind2":" ","subfields":[{"a":"n-us---"}]}},{"050":{"ind1":"0","ind2":" ","subfields":[{"a":"HV4194.A3"},{"b":"D3 1967"}]}},{"082":{"ind1":" ","ind2":" ","subfields":[{"a":"362/.9/73"}]}},{"100":{"ind1":"1","ind2":" ","subfields":[{"a":"Davis, Allen Freeman,"},{"d":"1931-"}]}},{"245":{"ind1":"1","ind2":"0","subfields":[{"a":"Spearheads for reform;"},{"b":"the social settlements and the progressive movement, 1890-1914"},{"c":"[by] Allen F. Davis."}]}},{"260":{"ind1":" ","ind2":" ","subfields":[{"a":"New York,"},{"b":"Oxford University Press,"},{"c":"1967."}]}},{"300":{"ind1":" ","ind2":" ","subfields":[{"a":"xviii, 322 p."},{"c":"22 cm."}]}},{"490":{"ind1":"0","ind2":" ","subfields":[{"a":"Urban life in America series"}]}},{"502":{"ind1":" ","ind2":" ","subfields":[{"a":"Issued in microfilm form as thesis, University of Wisconsin, 1960."}]}},{"504":{"ind1":" ","ind2":" ","subfields":[{"a":"\"A note on sources\": p. 247-255. Bibliography: p. 259-304."}]}},{"538":{"ind1":" ","ind2":" ","subfields":[{"a":"Mode of access: Internet."}]}},{"650":{"ind1":" ","ind2":"0","subfields":[{"a":"Social settlements"}]}},{"650":{"ind1":" ","ind2":"0","subfields":[{"a":"Progressivism (United States politics)"}]}},{"650":{"ind1":" ","ind2":"0","subfields":[{"a":"Cities and towns"},{"z":"United States."}]}},{"852":{"ind1":"0","ind2":" ","subfields":[{"a":"MiU"},{"b":"HATCH"},{"c":"GRAD"},{"h":"HV 4194 .D26"}]}},{"852":{"ind1":"0","ind2":" ","subfields":[{"a":"MiU"},{"b":"HATCH"},{"c":"GRAD"},{"h":"HV 4194 .D26"}]}},{"852":{"ind1":"0","ind2":" ","subfields":[{"a":"MiU"},{"b":"UGL"},{"h":"HV 4194 .D26"}]}},{"852":{"ind1":"0","ind2":" ","subfields":[{"a":"MiU"},{"b":"HATCH"},{"c":"GRAD"},{"h":"HV 4194 .D26"}]}},{"970":{"ind1":" ","ind2":" ","subfields":[{"a":"BK"},{"b":"Book"}]}},{"971":{"ind1":" ","ind2":" ","subfields":[{"a":"MiU"}]}},{"972":{"ind1":" ","ind2":" ","subfields":[{"c":"20040625"}]}},{"972":{"ind1":" ","ind2":" ","subfields":[{"c":"20040625"}]}},{"972":{"ind1":" ","ind2":" ","subfields":[{"c":"20040625"}]}},{"972":{"ind1":" ","ind2":" ","subfields":[{"c":"20040625"}]}},{"973":{"ind1":" ","ind2":" ","subfields":[{"a":"HT"},{"b":"avail_ht"}]}},{"973":{"ind1":" ","ind2":" ","subfields":[{"a":"AC"},{"b":"avail_circ"}]}},{"974":{"ind1":" ","ind2":" ","subfields":[{"u":"mdp.39015002281593"},{"r":"ic"},{"d":"20090807"}]}},{"974":{"ind1":" ","ind2":" ","subfields":[{"u":"mdp.39015014594108"},{"r":"ic"},{"d":"20090807"}]}},{"974":{"ind1":" ","ind2":" ","subfields":[{"u":"mdp.39015016230438"},{"r":"ic"},{"d":"20120419"}]}},{"998":{"ind1":" ","ind2":" ","subfields":[{"s":"9665"}]}}]}
|
73
|
+
{"leader":"01227nam a22004211 4500","fields":[{"001":"000004152"},{"003":"MiU"},{"005":"19890605000000.0"},{"006":"m d "},{"007":"cr bn ---auaua"},{"008":"880715|1960||||||| |||||||eng|u"},{"010":{"ind1":" ","ind2":" ","subfields":[{"a":"60005725"}]}},{"035":{"ind1":" ","ind2":" ","subfields":[{"a":"(RLIN)MIUG0289130-B"}]}},{"035":{"ind1":" ","ind2":" ","subfields":[{"a":"(CaOTULAS)159822835"}]}},{"035":{"ind1":" ","ind2":" ","subfields":[{"a":"(OCoLC)ocm00289130"}]}},{"035":{"ind1":" ","ind2":" ","subfields":[{"a":"sdr-nrlf.b120345171"}]}},{"040":{"ind1":" ","ind2":" ","subfields":[{"c":"OWibfC"},{"d":"MiU"},{"d":"CStRLIN"}]}},{"100":{"ind1":"1","ind2":" ","subfields":[{"a":"Lyon, Bryce Dale,"},{"d":"1920-"}]}},{"245":{"ind1":"1","ind2":"2","subfields":[{"a":"A constitutional and legal history of medieval England."}]}},{"260":{"ind1":" ","ind2":" ","subfields":[{"a":"New York,"},{"b":"Harper"},{"c":"[1960]"}]}},{"300":{"ind1":" ","ind2":" ","subfields":[{"a":"671p."},{"b":"illus."},{"c":"25 cm."}]}},{"504":{"ind1":" ","ind2":" ","subfields":[{"a":"Includes bibliography."}]}},{"538":{"ind1":" ","ind2":" ","subfields":[{"a":"Mode of access: Internet."}]}},{"650":{"ind1":" ","ind2":"0","subfields":[{"a":"Law"},{"z":"Great Britain"},{"x":"History"}]}},{"651":{"ind1":" ","ind2":"0","subfields":[{"a":"Great Britain"},{"x":"Politics and government"},{"y":"To 1485."}]}},{"852":{"ind1":"0","ind2":" ","subfields":[{"a":"MiU"},{"b":"HATCH"},{"c":"GRAD"},{"h":"JN 137 .L98"}]}},{"852":{"ind1":"0","ind2":" ","subfields":[{"a":"MiU"},{"b":"HATCH"},{"c":"GRAD"},{"h":"JN 137 .L98"}]}},{"852":{"ind1":" ","ind2":" ","subfields":[{"a":"uc1"},{"b":"SDR"},{"c":"NRLF"}]}},{"970":{"ind1":" ","ind2":" ","subfields":[{"a":"BK"},{"b":"Book"}]}},{"971":{"ind1":" ","ind2":" ","subfields":[{"a":"MiU"}]}},{"972":{"ind1":" ","ind2":" ","subfields":[{"c":"20040625"}]}},{"972":{"ind1":" ","ind2":" ","subfields":[{"c":"20040625"}]}},{"973":{"ind1":" ","ind2":" ","subfields":[{"a":"HT"},{"b":"avail_ht"}]}},{"973":{"ind1":" ","ind2":" ","subfields":[{"a":"AC"},{"b":"avail_circ"}]}},{"974":{"ind1":" ","ind2":" ","subfields":[{"u":"mdp.39015004930999"},{"r":"ic"},{"d":"20120530"}]}},{"974":{"ind1":" ","ind2":" ","subfields":[{"u":"mdp.39015066017214"},{"r":"ic"}]}},{"974":{"ind1":" ","ind2":" ","subfields":[{"z":"c.3"},{"u":"uc1.b3457094"},{"r":"ic"},{"d":"20100514"}]}},{"998":{"ind1":" ","ind2":" ","subfields":[{"s":"9665"}]}}]}
|
74
|
+
{"leader":"01517nam a22004931 4500","fields":[{"001":"000004309"},{"003":"MiU"},{"005":"20120524152322.0"},{"006":"m d "},{"007":"cr bn ---auaua"},{"008":"880715s1964 nyua j 000 1 eng u"},{"010":{"ind1":" ","ind2":" ","subfields":[{"a":"64019711"}]}},{"035":{"ind1":" ","ind2":" ","subfields":[{"a":"(RLIN)MIUG0301132-B"}]}},{"035":{"ind1":" ","ind2":" ","subfields":[{"a":"(CaOTULAS)159823014"}]}},{"035":{"ind1":" ","ind2":" ","subfields":[{"a":"(OCoLC)ocm00301132"}]}},{"040":{"ind1":" ","ind2":" ","subfields":[{"c":"ODaWU"},{"d":"InLS"},{"d":"*OCL*"},{"d":"MiU"},{"d":"CStRLIN"},{"d":"EYM"}]}},{"099":{"ind1":" ","ind2":"0","subfields":[{"a":"P Z7 .F5768 H3"}]}},{"100":{"ind1":"1","ind2":" ","subfields":[{"a":"Fitzhugh, Louise."}]}},{"245":{"ind1":"1","ind2":"0","subfields":[{"a":"Harriet, the spy /"},{"c":"written and illustrated by Louise Fitzhugh."}]}},{"260":{"ind1":" ","ind2":" ","subfields":[{"a":"New York :"},{"b":"Harper & Row,"},{"c":"1964."}]}},{"300":{"ind1":" ","ind2":" ","subfields":[{"a":"298 p. :"},{"b":"ill. ;"},{"c":"21 cm."}]}},{"538":{"ind1":" ","ind2":" ","subfields":[{"a":"Mode of access: Internet."}]}},{"590":{"ind1":" ","ind2":" ","subfields":[{"a":"SPEC WLPR: In the Lee Walp Family Juvenile Literature Collection. Gift of the Lee Walp Family."}]}},{"590":{"ind1":" ","ind2":" ","subfields":[{"a":"SPEC WLPR: Lee Walp’s clippings and notes laid in."}]}},{"590":{"ind1":" ","ind2":" ","subfields":[{"a":"SPEC WLPR: In dust jacket."}]}},{"650":{"ind1":" ","ind2":"0","subfields":[{"a":"Friendship"},{"v":"Juvenile fiction."}]}},{"651":{"ind1":" ","ind2":"0","subfields":[{"a":"New York (N.Y.)"},{"v":"Juvenile fiction."}]}},{"852":{"ind1":"0","ind2":" ","subfields":[{"a":"MiU"},{"b":"UGL"},{"h":"PZ 7 .F555"}]}},{"852":{"ind1":"0","ind2":" ","subfields":[{"a":"MiU"},{"b":"UGL"},{"h":"PZ 7 .F555"}]}},{"852":{"ind1":"0","ind2":" ","subfields":[{"a":"MiU"},{"b":"UGL"},{"c":"CLC"},{"h":"PZ 7 .F555"}]}},{"852":{"ind1":"0","ind2":" ","subfields":[{"a":"MiU"},{"b":"HATCH"},{"c":"GRAD"},{"h":"PZ 7 .F555"}]}},{"852":{"ind1":"0","ind2":" ","subfields":[{"a":"MiU"},{"b":"SPEC"},{"c":"WLPR"},{"h":"P Z7 .F5768 H3"}]}},{"970":{"ind1":" ","ind2":" ","subfields":[{"a":"BK"},{"b":"Book"}]}},{"971":{"ind1":" ","ind2":" ","subfields":[{"a":"MiU"}]}},{"972":{"ind1":" ","ind2":" ","subfields":[{"c":"20040625"}]}},{"972":{"ind1":" ","ind2":" ","subfields":[{"c":"20040625"}]}},{"972":{"ind1":" ","ind2":" ","subfields":[{"c":"20040625"}]}},{"972":{"ind1":" ","ind2":" ","subfields":[{"c":"20040625"}]}},{"972":{"ind1":" ","ind2":" ","subfields":[{"c":"20120524"}]}},{"973":{"ind1":" ","ind2":" ","subfields":[{"a":"HT"},{"b":"avail_ht"}]}},{"973":{"ind1":" ","ind2":" ","subfields":[{"a":"AC"},{"b":"avail_circ"}]}},{"974":{"ind1":" ","ind2":" ","subfields":[{"u":"mdp.39015058018790"},{"r":"ic"},{"d":"20120530"}]}},{"997":{"ind1":" ","ind2":" ","subfields":[{"a":"MARS"}]}},{"998":{"ind1":" ","ind2":" ","subfields":[{"s":"9665"}]}}]}
|
75
|
+
{"leader":"01122nam a22003851 4500","fields":[{"001":"000004964"},{"003":"MiU"},{"005":"19880715000000.0"},{"006":"m d "},{"007":"cr bn ---auaua"},{"008":"880715|1965||||||| |||||||eng|u"},{"010":{"ind1":" ","ind2":" ","subfields":[{"a":"65023062"}]}},{"035":{"ind1":" ","ind2":" ","subfields":[{"a":"(RLIN)MIUG0345135-B"}]}},{"035":{"ind1":" ","ind2":" ","subfields":[{"a":"(CaOTULAS)159823753"}]}},{"035":{"ind1":" ","ind2":" ","subfields":[{"a":"(OCoLC)ocm00345135"}]}},{"040":{"ind1":" ","ind2":" ","subfields":[{"c":"OUrC"},{"d":"MiU"},{"d":"CStRLIN"}]}},{"100":{"ind1":"1","ind2":" ","subfields":[{"a":"Nussbaum, Allen."}]}},{"245":{"ind1":"1","ind2":"0","subfields":[{"a":"Electromagnetic theory for engineers and scientists."}]}},{"260":{"ind1":" ","ind2":" ","subfields":[{"a":"Englewood Cliffs, N. J.,"},{"b":"Prentice-Hall"},{"c":"[1965]"}]}},{"300":{"ind1":" ","ind2":" ","subfields":[{"a":"xiii, 312 p."},{"b":"illus."}]}},{"490":{"ind1":"0","ind2":" ","subfields":[{"a":"Microwaves and fields series"}]}},{"500":{"ind1":" ","ind2":" ","subfields":[{"a":"Prentice-Hall electrical engineering series."}]}},{"538":{"ind1":" ","ind2":" ","subfields":[{"a":"Mode of access: Internet."}]}},{"650":{"ind1":" ","ind2":"0","subfields":[{"a":"Electromagnetic theory"}]}},{"852":{"ind1":"0","ind2":" ","subfields":[{"a":"MiU"},{"b":"SCI"},{"c":"BKS"},{"h":"QC 670.N975"}]}},{"852":{"ind1":"0","ind2":" ","subfields":[{"a":"MiU"},{"b":"SCI"},{"c":"BKS"},{"h":"QC 670 .N975"}]}},{"970":{"ind1":" ","ind2":" ","subfields":[{"a":"BK"},{"b":"Book"}]}},{"971":{"ind1":" ","ind2":" ","subfields":[{"a":"MiU"}]}},{"972":{"ind1":" ","ind2":" ","subfields":[{"c":"20040625"}]}},{"972":{"ind1":" ","ind2":" ","subfields":[{"c":"20040625"}]}},{"973":{"ind1":" ","ind2":" ","subfields":[{"a":"HT"},{"b":"avail_ht"}]}},{"973":{"ind1":" ","ind2":" ","subfields":[{"a":"AC"},{"b":"avail_circ"}]}},{"974":{"ind1":" ","ind2":" ","subfields":[{"u":"mdp.39015017245518"},{"r":"ic"},{"d":"20120530"}]}},{"974":{"ind1":" ","ind2":" ","subfields":[{"u":"mdp.39015017270458"},{"r":"ic"},{"d":"20100306"}]}},{"998":{"ind1":" ","ind2":" ","subfields":[{"s":"9665"}]}}]}
|
76
|
+
{"leader":"00920nam a22003371 4500","fields":[{"001":"000005123"},{"003":"MiU"},{"005":"19880715000000.0"},{"006":"m d "},{"007":"cr bn ---auaua"},{"008":"880715|1965||||||| |||||||eng|u"},{"010":{"ind1":" ","ind2":" ","subfields":[{"a":"65018827"}]}},{"035":{"ind1":" ","ind2":" ","subfields":[{"a":"(RLIN)MIUG0358204-B"}]}},{"035":{"ind1":" ","ind2":" ","subfields":[{"a":"(CaOTULAS)159823931"}]}},{"035":{"ind1":" ","ind2":" ","subfields":[{"a":"(OCoLC)ocm00358204"}]}},{"040":{"ind1":" ","ind2":" ","subfields":[{"c":"ODaWU"},{"d":"MiU"},{"d":"CStRLIN"}]}},{"100":{"ind1":"1","ind2":" ","subfields":[{"a":"Potter, Stephen,"},{"d":"1900-1969."}]}},{"245":{"ind1":"1","ind2":"0","subfields":[{"a":"Coleridge and S.T.C."}]}},{"260":{"ind1":" ","ind2":" ","subfields":[{"a":"New York,"},{"b":"Russell & Russell,"},{"c":"1965."}]}},{"300":{"ind1":" ","ind2":" ","subfields":[{"a":"284 p."}]}},{"504":{"ind1":" ","ind2":" ","subfields":[{"a":"Bibliography: p. 281-282."}]}},{"538":{"ind1":" ","ind2":" ","subfields":[{"a":"Mode of access: Internet."}]}},{"600":{"ind1":"1","ind2":"0","subfields":[{"a":"Coleridge, Samuel Taylor,"},{"d":"1772-1834."}]}},{"852":{"ind1":"1","ind2":" ","subfields":[{"a":"MiU"},{"b":"BUHR"},{"c":"GRAD"},{"h":"828 C693O P87 1965"}]}},{"970":{"ind1":" ","ind2":" ","subfields":[{"a":"BK"},{"b":"Book"}]}},{"971":{"ind1":" ","ind2":" ","subfields":[{"a":"MiU"}]}},{"972":{"ind1":" ","ind2":" ","subfields":[{"c":"20040625"}]}},{"973":{"ind1":" ","ind2":" ","subfields":[{"a":"HT"},{"b":"avail_ht"}]}},{"973":{"ind1":" ","ind2":" ","subfields":[{"a":"AC"},{"b":"avail_circ"}]}},{"974":{"ind1":" ","ind2":" ","subfields":[{"u":"mdp.39015030723566"},{"r":"ic"},{"d":"20120530"}]}},{"998":{"ind1":" ","ind2":" ","subfields":[{"s":"9665"}]}}]}
|
77
|
+
{"leader":"00919nam a22003251 4500","fields":[{"001":"000005617"},{"003":"MiU"},{"005":"19880715000000.0"},{"006":"m d "},{"007":"cr bn ---auaua"},{"008":"880715|1971||||||| |||||||eng|u"},{"035":{"ind1":" ","ind2":" ","subfields":[{"a":"(RLIN)MIUG0400752-B"}]}},{"035":{"ind1":" ","ind2":" ","subfields":[{"a":"(CaOTULAS)159824485"}]}},{"035":{"ind1":" ","ind2":" ","subfields":[{"a":"(OCoLC)ocm00400752"}]}},{"040":{"ind1":" ","ind2":" ","subfields":[{"c":"OU"},{"d":"MiU"},{"d":"CStRLIN"}]}},{"100":{"ind1":"1","ind2":" ","subfields":[{"a":"Schlesinger, Janet."}]}},{"245":{"ind1":"1","ind2":"0","subfields":[{"a":"Challenge to the urban orchestra;"},{"b":"the case of the Pittsburgh Symphony."}]}},{"260":{"ind1":" ","ind2":" ","subfields":[{"a":"[Pittsburgh?,"},{"c":"c1971]"}]}},{"300":{"ind1":" ","ind2":" ","subfields":[{"a":"163 p."},{"c":"29 cm."}]}},{"504":{"ind1":" ","ind2":" ","subfields":[{"a":"Bibliography: p. 158-163."}]}},{"538":{"ind1":" ","ind2":" ","subfields":[{"a":"Mode of access: Internet."}]}},{"610":{"ind1":"2","ind2":"0","subfields":[{"a":"Pittsburgh Symphony Orchestra."}]}},{"852":{"ind1":"0","ind2":" ","subfields":[{"a":"MiU"},{"b":"BUHR"},{"c":"MUSI"},{"h":"ML 200.8 .P69 S34"}]}},{"970":{"ind1":" ","ind2":" ","subfields":[{"a":"BK"},{"b":"Book"}]}},{"971":{"ind1":" ","ind2":" ","subfields":[{"a":"MiU"}]}},{"972":{"ind1":" ","ind2":" ","subfields":[{"c":"20040625"}]}},{"973":{"ind1":" ","ind2":" ","subfields":[{"a":"HT"},{"b":"avail_ht"}]}},{"973":{"ind1":" ","ind2":" ","subfields":[{"a":"AC"},{"b":"avail_circ"}]}},{"974":{"ind1":" ","ind2":" ","subfields":[{"u":"mdp.39015007987756"},{"r":"ic"},{"d":"20120525"}]}},{"998":{"ind1":" ","ind2":" ","subfields":[{"s":"9665"}]}}]}
|
78
|
+
{"leader":"01356nam a22003851 4500","fields":[{"001":"000005933"},{"003":"MiU"},{"005":"19990430000000.0"},{"006":"m d "},{"007":"cr bn ---auaua"},{"008":"880715|1957||||||| |||||||eng|u"},{"035":{"ind1":" ","ind2":" ","subfields":[{"a":"(RLIN)MIUG0424414-B"}]}},{"035":{"ind1":" ","ind2":" ","subfields":[{"a":"(CaOTULAS)159824847"}]}},{"035":{"ind1":" ","ind2":" ","subfields":[{"a":"(OCoLC)ocm00424414"}]}},{"040":{"ind1":" ","ind2":" ","subfields":[{"c":"OWorP"},{"d":"MiU"},{"d":"CStRLIN"}]}},{"100":{"ind1":"1","ind2":" ","subfields":[{"a":"Cunningham, Noble E"}]}},{"245":{"ind1":"1","ind2":"4","subfields":[{"a":"The Jeffersonian Republicans;"},{"b":"the formation of party organization, 1789-1801,"},{"c":"by Noble E. Cunningham."}]}},{"260":{"ind1":" ","ind2":" ","subfields":[{"a":"Chapel Hill,"},{"b":"Published for the Institute of Early American History and Culture at Williamsburg by the Univ. of N. Car. Pr."},{"c":"[c1957]"}]}},{"300":{"ind1":" ","ind2":" ","subfields":[{"a":"x, 279 p."},{"b":"facsims."},{"c":"24 cm."}]}},{"538":{"ind1":" ","ind2":" ","subfields":[{"a":"Mode of access: Internet."}]}},{"610":{"ind1":"2","ind2":"0","subfields":[{"a":"Democratic Party (U.S.)"},{"x":"History."}]}},{"651":{"ind1":" ","ind2":"0","subfields":[{"a":"United States"},{"x":"Politics and government"},{"y":"1789-1809."}]}},{"650":{"ind1":" ","ind2":"0","subfields":[{"a":"Political parties"},{"z":"United States"},{"x":"History."}]}},{"710":{"ind1":"2","ind2":" ","subfields":[{"a":"Institute of Early American History and Culture (Williamsburg, Va.)"}]}},{"852":{"ind1":"0","ind2":" ","subfields":[{"a":"MiU"},{"b":"HATCH"},{"c":"GRAD"},{"h":"JK 2316 .C97"}]}},{"852":{"ind1":"0","ind2":" ","subfields":[{"a":"MiU"},{"b":"HATCH"},{"c":"GRAD"},{"h":"JK 2316 .C97"}]}},{"970":{"ind1":" ","ind2":" ","subfields":[{"a":"BK"},{"b":"Book"}]}},{"971":{"ind1":" ","ind2":" ","subfields":[{"a":"MiU"}]}},{"972":{"ind1":" ","ind2":" ","subfields":[{"c":"20040625"}]}},{"972":{"ind1":" ","ind2":" ","subfields":[{"c":"20040625"}]}},{"973":{"ind1":" ","ind2":" ","subfields":[{"a":"HT"},{"b":"avail_ht"}]}},{"973":{"ind1":" ","ind2":" ","subfields":[{"a":"AC"},{"b":"avail_circ"}]}},{"974":{"ind1":" ","ind2":" ","subfields":[{"u":"mdp.39015007045035"},{"r":"ic"},{"d":"20120530"}]}},{"974":{"ind1":" ","ind2":" ","subfields":[{"u":"mdp.39015066018212"},{"r":"ic"}]}},{"998":{"ind1":" ","ind2":" ","subfields":[{"s":"9665"}]}}]}
|
79
|
+
{"leader":"01058nam a22003731 4500","fields":[{"001":"000006347"},{"003":"MiU"},{"005":"19880715000000.0"},{"006":"m d "},{"007":"cr bn ---auaua"},{"008":"880715|1972||||||| |||||||eng|u"},{"035":{"ind1":" ","ind2":" ","subfields":[{"a":"(RLIN)MIUG0477263-B"}]}},{"035":{"ind1":" ","ind2":" ","subfields":[{"a":"(CaOTULAS)159825319"}]}},{"035":{"ind1":" ","ind2":" ","subfields":[{"a":"(OCoLC)ocm00477263"}]}},{"040":{"ind1":" ","ind2":" ","subfields":[{"c":"OCX"},{"d":"MiU"},{"d":"CStRLIN"}]}},{"082":{"ind1":" ","ind2":" ","subfields":[{"a":"417/.7"}]}},{"100":{"ind1":"1","ind2":" ","subfields":[{"a":"Cottrell, Leonard."}]}},{"245":{"ind1":"1","ind2":"0","subfields":[{"a":"Reading the past;"},{"b":"the story of deciphering ancient languages"},{"c":"[by] Leonard Cottrell."}]}},{"260":{"ind1":" ","ind2":" ","subfields":[{"a":"London,"},{"b":"J. M. Dent & Sons"},{"c":"[1972]"}]}},{"300":{"ind1":" ","ind2":" ","subfields":[{"a":"viii, 182 p."},{"b":"illus."},{"c":"24 cm."}]}},{"504":{"ind1":" ","ind2":" ","subfields":[{"a":"Bibliography: p. 171-173."}]}},{"538":{"ind1":" ","ind2":" ","subfields":[{"a":"Mode of access: Internet."}]}},{"650":{"ind1":" ","ind2":"0","subfields":[{"a":"Hieroglyphics."}]}},{"650":{"ind1":" ","ind2":"0","subfields":[{"a":"Cuneiform writing"}]}},{"650":{"ind1":" ","ind2":"0","subfields":[{"a":"Alphabet."}]}},{"650":{"ind1":" ","ind2":"0","subfields":[{"a":"Writing"},{"x":"History"}]}},{"852":{"ind1":"0","ind2":" ","subfields":[{"a":"MiU"},{"b":"HATCH"},{"c":"GRAD"},{"h":"P211 .C84 1972"}]}},{"970":{"ind1":" ","ind2":" ","subfields":[{"a":"BK"},{"b":"Book"}]}},{"971":{"ind1":" ","ind2":" ","subfields":[{"a":"MiU"}]}},{"972":{"ind1":" ","ind2":" ","subfields":[{"c":"20040625"}]}},{"973":{"ind1":" ","ind2":" ","subfields":[{"a":"HT"},{"b":"avail_ht"}]}},{"973":{"ind1":" ","ind2":" ","subfields":[{"a":"AC"},{"b":"avail_circ"}]}},{"974":{"ind1":" ","ind2":" ","subfields":[{"u":"mdp.39015003847020"},{"r":"ic"},{"d":"20120530"}]}},{"998":{"ind1":" ","ind2":" ","subfields":[{"s":"9665"}]}}]}
|
80
|
+
{"leader":"01837nam a22004571 4500","fields":[{"001":"000006850"},{"003":"MiU"},{"005":"20010806000000.0"},{"008":"880715s1967 ilu b 00010 eng "},{"010":{"ind1":" ","ind2":" ","subfields":[{"a":"66020582"}]}},{"035":{"ind1":" ","ind2":" ","subfields":[{"a":"(RLIN)MIUG0513381-B"}]}},{"035":{"ind1":" ","ind2":" ","subfields":[{"a":"(CaOTULAS)159825875"}]}},{"035":{"ind1":" ","ind2":" ","subfields":[{"a":"(OCoLC)ocm00513381"}]}},{"035":{"ind1":" ","ind2":" ","subfields":[{"a":"sdr-umdb.b10778883"}]}},{"040":{"ind1":" ","ind2":" ","subfields":[{"a":"DLC"},{"c":"DLC"},{"d":"MiU"}]}},{"041":{"ind1":"1","ind2":" ","subfields":[{"a":"eng"},{"h":"rus"}]}},{"043":{"ind1":" ","ind2":" ","subfields":[{"a":"e-ur---"}]}},{"100":{"ind1":"1","ind2":" ","subfields":[{"a":"Schwarz, Solomon M."}]}},{"240":{"ind1":"1","ind2":"0","subfields":[{"a":"Menʹshevizm i bolʹshevizm v ikh otnoshenii k massovomu rabochemu dvizhenii︠u︡."},{"l":"English"}]}},{"245":{"ind1":"1","ind2":"4","subfields":[{"a":"The Russian Revolution of 1905 :"},{"b":"the workers' movement and the formation of Bolshevism and Menshevism /"},{"c":"[by] Solomon M. Schwarz ; Translated by Gertrude Vakar."}]}},{"260":{"ind1":" ","ind2":" ","subfields":[{"a":"Chicago :"},{"b":"University of Chicago Press,"},{"c":"[1967]"}]}},{"300":{"ind1":" ","ind2":" ","subfields":[{"a":"xxii, 361 p. ;"},{"c":"24 cm."}]}},{"490":{"ind1":"0","ind2":" ","subfields":[{"a":"Hoover Institution publications"}]}},{"490":{"ind1":"0","ind2":" ","subfields":[{"a":"History of Menshevism"}]}},{"500":{"ind1":" ","ind2":" ","subfields":[{"a":"Translation and expansion of Menʹshevizm i bolʹshevizm v ikh otnoshenii k massovomu rabochemu dvizhenii︠u︡."}]}},{"500":{"ind1":" ","ind2":" ","subfields":[{"a":"\"One of a series arising from the work of the Inter-university Project on the History of the Menshevik Movement.\""}]}},{"504":{"ind1":" ","ind2":" ","subfields":[{"a":"Includes bibliographical references."}]}},{"610":{"ind1":"2","ind2":"0","subfields":[{"a":"Rossiĭskai︠a︡ sot︠s︡ial-demokraticheskai︠a︡ rabochai︠a︡ partii︠a︡."}]}},{"650":{"ind1":" ","ind2":"0","subfields":[{"a":"Labor movement"},{"z":"Soviet Union."}]}},{"651":{"ind1":" ","ind2":"0","subfields":[{"a":"Russia"},{"x":"History"},{"y":"Revolution, 1905-1907."}]}},{"710":{"ind1":"2","ind2":" ","subfields":[{"a":"Inter-university Project on the History of the Menshevik Movement."}]}},{"852":{"ind1":"0","ind2":" ","subfields":[{"a":"MiU"},{"b":"HATCH"},{"c":"GRAD"},{"h":"JN6598.R8 S423"}]}},{"852":{"ind1":"0","ind2":" ","subfields":[{"a":"MiU"},{"b":"HATCH"},{"c":"GRAD"},{"h":"JN6598.R8 S423"}]}},{"852":{"ind1":"0","ind2":" ","subfields":[{"a":"MiU"},{"b":"SPEC"},{"c":"LABD"},{"h":"JN 6598 .R8 S423"},{"x":"30215341"}]}},{"970":{"ind1":" ","ind2":" ","subfields":[{"a":"BK"},{"b":"Book"}]}},{"971":{"ind1":" ","ind2":" ","subfields":[{"a":"MiU"}]}},{"972":{"ind1":" ","ind2":" ","subfields":[{"c":"20040625"}]}},{"972":{"ind1":" ","ind2":" ","subfields":[{"c":"20040625"}]}},{"972":{"ind1":" ","ind2":" ","subfields":[{"c":"20040625"}]}},{"973":{"ind1":" ","ind2":" ","subfields":[{"a":"AC"},{"b":"avail_circ"}]}},{"998":{"ind1":" ","ind2":" ","subfields":[{"s":"9615"}]}}]}
|
81
|
+
{"leader":"01209nam a22003851 4500","fields":[{"001":"000008015"},{"003":"MiU"},{"005":"19890306000000.0"},{"006":"m d "},{"007":"cr bn ---auaua"},{"008":"880715s1973 nyua d |00000 eng "},{"010":{"ind1":" ","ind2":" ","subfields":[{"a":"73153601"}]}},{"035":{"ind1":" ","ind2":" ","subfields":[{"a":"(RLIN)MIUG0590313-B"}]}},{"035":{"ind1":" ","ind2":" ","subfields":[{"a":"(CaOTULAS)159827164"}]}},{"035":{"ind1":" ","ind2":" ","subfields":[{"a":"(OCoLC)ocm00590313"}]}},{"040":{"ind1":" ","ind2":" ","subfields":[{"a":"DLC"},{"c":"DLC"},{"d":"MiU"}]}},{"050":{"ind1":"0","ind2":" ","subfields":[{"a":"PE1625"},{"b":".S713 1973"}]}},{"082":{"ind1":" ","ind2":" ","subfields":[{"a":"423"}]}},{"245":{"ind1":"0","ind2":"0","subfields":[{"a":"Funk & Wagnalls standard dictionary of the English language."}]}},{"250":{"ind1":" ","ind2":" ","subfields":[{"a":"International ed.,"},{"b":"with special supplementary features."}]}},{"260":{"ind1":" ","ind2":" ","subfields":[{"a":"New York,"},{"b":"Funk & Wagnalls"},{"c":"[1973]"}]}},{"300":{"ind1":" ","ind2":" ","subfields":[{"a":"2 v. (xx, 1695 p.)"},{"b":"illus. (part col.)"},{"c":"29 cm."}]}},{"538":{"ind1":" ","ind2":" ","subfields":[{"a":"Mode of access: Internet."}]}},{"650":{"ind1":" ","ind2":"0","subfields":[{"a":"English language"},{"x":"Dictionaries"}]}},{"740":{"ind1":"0","ind2":" ","subfields":[{"a":"Funk and Wagnalls standard dictionary of the English language."}]}},{"852":{"ind1":"0","ind2":" ","subfields":[{"a":"MiU"},{"b":"HATCH"},{"c":"GRAD"},{"h":"PE 1625 .S785 1973"},{"x":"tr. fr. GLRF 9-5-97"}]}},{"970":{"ind1":" ","ind2":" ","subfields":[{"a":"BK"},{"b":"Book"}]}},{"970":{"ind1":" ","ind2":" ","subfields":[{"a":"DI"},{"b":"Dictionaries"}]}},{"971":{"ind1":" ","ind2":" ","subfields":[{"a":"MiU"}]}},{"972":{"ind1":" ","ind2":" ","subfields":[{"c":"20040625"}]}},{"973":{"ind1":" ","ind2":" ","subfields":[{"a":"HT"},{"b":"avail_ht"}]}},{"973":{"ind1":" ","ind2":" ","subfields":[{"a":"AC"},{"b":"avail_circ"}]}},{"974":{"ind1":" ","ind2":" ","subfields":[{"z":"v.1"},{"u":"mdp.39015066305270"},{"r":"ic"},{"d":"20120530"}]}},{"974":{"ind1":" ","ind2":" ","subfields":[{"z":"v.2"},{"u":"mdp.39015066305429"},{"r":"ic"}]}},{"998":{"ind1":" ","ind2":" ","subfields":[{"s":"9665"}]}}]}
|
82
|
+
{"leader":"01009nam a22003731 4500","fields":[{"001":"000008105"},{"003":"MiU"},{"005":"20071115093023.0"},{"006":"m d "},{"007":"cr bn ---auaua"},{"008":"880715s1973 nyu |00010 eng "},{"010":{"ind1":" ","ind2":" ","subfields":[{"a":"72014035"}]}},{"020":{"ind1":" ","ind2":" ","subfields":[{"a":"0442214707"},{"c":"$5.95"}]}},{"035":{"ind1":" ","ind2":" ","subfields":[{"a":"(RLIN)MIUG0595319-B"}]}},{"035":{"ind1":" ","ind2":" ","subfields":[{"a":"(CaOTULAS)159827258"}]}},{"035":{"ind1":" ","ind2":" ","subfields":[{"a":"(OCoLC)ocm00595319"}]}},{"035":{"ind1":" ","ind2":" ","subfields":[{"a":"sdr-wu88160"}]}},{"040":{"ind1":" ","ind2":" ","subfields":[{"a":"DLC"},{"c":"DLC"},{"d":"MiU"}]}},{"043":{"ind1":" ","ind2":" ","subfields":[{"a":"n-us---"}]}},{"050":{"ind1":"0","ind2":" ","subfields":[{"a":"HQ536"},{"b":".B86"}]}},{"082":{"ind1":" ","ind2":" ","subfields":[{"a":"301.42/0973"}]}},{"100":{"ind1":"1","ind2":" ","subfields":[{"a":"Burger, Robert E."}]}},{"245":{"ind1":"1","ind2":"4","subfields":[{"a":"The love contract;"},{"b":"handbook for a liberated marriage"},{"c":"[by] Robert E. Burger."}]}},{"260":{"ind1":" ","ind2":" ","subfields":[{"a":"New York,"},{"b":"Van Nostrand Reinhold"},{"c":"[1973]"}]}},{"300":{"ind1":" ","ind2":" ","subfields":[{"a":"ix, 107 p."},{"c":"24 cm."}]}},{"538":{"ind1":" ","ind2":" ","subfields":[{"a":"Mode of access: Internet."}]}},{"650":{"ind1":" ","ind2":"0","subfields":[{"a":"Marriage"},{"z":"United States"}]}},{"852":{"ind1":" ","ind2":" ","subfields":[{"a":"wu"},{"b":"SDR"},{"c":"WU"}]}},{"970":{"ind1":" ","ind2":" ","subfields":[{"a":"BK"},{"b":"Book"}]}},{"971":{"ind1":" ","ind2":" ","subfields":[{"a":"MiU"}]}},{"973":{"ind1":" ","ind2":" ","subfields":[{"a":"HT"},{"b":"avail_ht"}]}},{"973":{"ind1":" ","ind2":" ","subfields":[{"a":"AC"},{"b":"avail_circ"}]}},{"974":{"ind1":" ","ind2":" ","subfields":[{"u":"wu.89031137284"},{"r":"ic"},{"d":"20120530"}]}},{"998":{"ind1":" ","ind2":" ","subfields":[{"s":"9665"}]}}]}
|
83
|
+
{"leader":"01115nam a22003731 4500","fields":[{"001":"000008459"},{"003":"MiU"},{"005":"19880715000000.0"},{"006":"m d "},{"007":"cr bn ---auaua"},{"008":"880715|1970||||||| |||||||ita|u"},{"010":{"ind1":" ","ind2":" ","subfields":[{"a":"76881291"}]}},{"035":{"ind1":" ","ind2":" ","subfields":[{"a":"(RLIN)MIUG0615380-B"}]}},{"035":{"ind1":" ","ind2":" ","subfields":[{"a":"(CaOTULAS)159827651"}]}},{"035":{"ind1":" ","ind2":" ","subfields":[{"a":"(OCoLC)ocm00615380"}]}},{"035":{"ind1":" ","ind2":" ","subfields":[{"a":"sdr-nrlfGLAD17038931-B"}]}},{"040":{"ind1":" ","ind2":" ","subfields":[{"c":"OCU"},{"d":"MiU"},{"d":"CStRLIN"}]}},{"050":{"ind1":" ","ind2":"4","subfields":[{"a":"PA2402"},{"b":".S21"}]}},{"100":{"ind1":"1","ind2":" ","subfields":[{"a":"Savelli, Angelo,"},{"d":"1930-"}]}},{"245":{"ind1":"1","ind2":"0","subfields":[{"a":"Nuovissime interpretazioni etrusche."},{"b":"Le lamine d'oro di Pyrgi, l'iscrizione estrusco-latina del Lapis Niger, la stele greco-tirrena di Lemno."}]}},{"260":{"ind1":" ","ind2":" ","subfields":[{"a":"Bologna,"},{"b":"Tip. Accorsi,"},{"c":"1970."}]}},{"300":{"ind1":" ","ind2":" ","subfields":[{"a":"78 p."},{"c":"24 cm."}]}},{"538":{"ind1":" ","ind2":" ","subfields":[{"a":"Mode of access: Internet."}]}},{"650":{"ind1":" ","ind2":"0","subfields":[{"a":"Inscriptions, Etruscan"}]}},{"852":{"ind1":"0","ind2":" ","subfields":[{"a":"MiU"},{"b":"HATCH"},{"c":"GRAD"},{"h":"PA2402 .S21"}]}},{"852":{"ind1":" ","ind2":" ","subfields":[{"a":"uc1"},{"b":"SDR"},{"c":"NRLF"}]}},{"970":{"ind1":" ","ind2":" ","subfields":[{"a":"BK"},{"b":"Book"}]}},{"971":{"ind1":" ","ind2":" ","subfields":[{"a":"MiU"}]}},{"972":{"ind1":" ","ind2":" ","subfields":[{"c":"20040625"}]}},{"973":{"ind1":" ","ind2":" ","subfields":[{"a":"HT"},{"b":"avail_ht"}]}},{"973":{"ind1":" ","ind2":" ","subfields":[{"a":"AC"},{"b":"avail_circ"}]}},{"974":{"ind1":" ","ind2":" ","subfields":[{"u":"mdp.39015025030563"},{"r":"ic"},{"d":"20120530"}]}},{"974":{"ind1":" ","ind2":" ","subfields":[{"u":"uc1.b3176758"},{"r":"ic"},{"d":"20090915"}]}},{"998":{"ind1":" ","ind2":" ","subfields":[{"s":"9665"}]}}]}
|
84
|
+
{"leader":"01202nam a22004211 4500","fields":[{"001":"000009080"},{"003":"MiU"},{"005":"19880715000000.0"},{"006":"m d "},{"007":"cr bn ---auaua"},{"008":"880715s1972 enka b |00110 engx "},{"010":{"ind1":" ","ind2":" ","subfields":[{"a":"73160987"}]}},{"015":{"ind1":" ","ind2":" ","subfields":[{"a":"B73-00589"}]}},{"020":{"ind1":" ","ind2":" ","subfields":[{"a":"0140806652"},{"c":"£1.25"}]}},{"035":{"ind1":" ","ind2":" ","subfields":[{"a":"(RLIN)MIUG0651225-B"}]}},{"035":{"ind1":" ","ind2":" ","subfields":[{"a":"(CaOTULAS)159828340"}]}},{"035":{"ind1":" ","ind2":" ","subfields":[{"a":"(OCoLC)ocm00651225"}]}},{"040":{"ind1":" ","ind2":" ","subfields":[{"a":"DLC"},{"c":"DLC"},{"d":"MiU"},{"d":"CStRLIN"}]}},{"050":{"ind1":"0","ind2":" ","subfields":[{"a":"P41"},{"b":".P72"}]}},{"082":{"ind1":" ","ind2":" ","subfields":[{"a":"301.2/1"}]}},{"100":{"ind1":"1","ind2":" ","subfields":[{"a":"Pride, J. B. E."}]}},{"245":{"ind1":"1","ind2":"0","subfields":[{"a":"Sociolinguistics: selected readings;"},{"c":"edited by J. B. Pride and Janet Holmes."}]}},{"260":{"ind1":" ","ind2":" ","subfields":[{"a":"[Harmondsworth,]"},{"b":"Penguin,"},{"c":"[1972]"}]}},{"300":{"ind1":" ","ind2":" ","subfields":[{"a":"381 p."},{"b":"illus."},{"c":"20 cm. index."}]}},{"490":{"ind1":"0","ind2":" ","subfields":[{"a":"Penguin education"}]}},{"490":{"ind1":"0","ind2":" ","subfields":[{"a":"Penguin modern linguistics readings"}]}},{"504":{"ind1":" ","ind2":" ","subfields":[{"a":"Bibliography: p. 367-369."}]}},{"538":{"ind1":" ","ind2":" ","subfields":[{"a":"Mode of access: Internet."}]}},{"650":{"ind1":" ","ind2":"0","subfields":[{"a":"Sociolinguistics."}]}},{"700":{"ind1":"1","ind2":" ","subfields":[{"a":"Holmes, Janet."},{"e":"joint comp."}]}},{"852":{"ind1":"0","ind2":" ","subfields":[{"a":"MiU"},{"b":"HATCH"},{"c":"GRAD"},{"h":"P 41 .P946"}]}},{"970":{"ind1":" ","ind2":" ","subfields":[{"a":"BK"},{"b":"Book"}]}},{"971":{"ind1":" ","ind2":" ","subfields":[{"a":"MiU"}]}},{"972":{"ind1":" ","ind2":" ","subfields":[{"c":"20040625"}]}},{"973":{"ind1":" ","ind2":" ","subfields":[{"a":"HT"},{"b":"avail_ht"}]}},{"973":{"ind1":" ","ind2":" ","subfields":[{"a":"AC"},{"b":"avail_circ"}]}},{"974":{"ind1":" ","ind2":" ","subfields":[{"u":"mdp.39015019228280"},{"r":"ic"},{"d":"20120530"}]}},{"998":{"ind1":" ","ind2":" ","subfields":[{"s":"9665"}]}}]}
|
85
|
+
{"leader":"01075nam a22003851 4500","fields":[{"001":"000009820"},{"003":"MiU"},{"005":"19880715000000.0"},{"006":"m d "},{"007":"cr bn ---auaua"},{"008":"880715s1973 nyu b 00010beng "},{"010":{"ind1":" ","ind2":" ","subfields":[{"a":"73000507"}]}},{"035":{"ind1":" ","ind2":" ","subfields":[{"a":"(RLIN)MIUG0695465-B"}]}},{"035":{"ind1":" ","ind2":" ","subfields":[{"a":"(CaOTULAS)159829137"}]}},{"035":{"ind1":" ","ind2":" ","subfields":[{"a":"(OCoLC)ocm00695465"}]}},{"040":{"ind1":" ","ind2":" ","subfields":[{"a":"DLC"},{"c":"DLC"},{"d":"MiU"}]}},{"050":{"ind1":"0","ind2":" ","subfields":[{"a":"PS1291"},{"b":".H8"}]}},{"082":{"ind1":" ","ind2":" ","subfields":[{"a":"811/.2"}]}},{"100":{"ind1":"1","ind2":" ","subfields":[{"a":"Hudspeth, Robert N."}]}},{"245":{"ind1":"0","ind2":"0","subfields":[{"a":"Ellery Channing,"},{"c":"by Robert N. Hudspeth."}]}},{"260":{"ind1":" ","ind2":" ","subfields":[{"a":"New York,"},{"b":"Twayne Publishers"},{"c":"[1973]"}]}},{"300":{"ind1":" ","ind2":" ","subfields":[{"a":"182 p."},{"c":"21 cm."}]}},{"490":{"ind1":"0","ind2":" ","subfields":[{"a":"Twayne's United States authors series,"},{"v":"TUSAS 223"}]}},{"504":{"ind1":" ","ind2":" ","subfields":[{"a":"Bibliography: p. 171-177."}]}},{"538":{"ind1":" ","ind2":" ","subfields":[{"a":"Mode of access: Internet."}]}},{"600":{"ind1":"1","ind2":"0","subfields":[{"a":"Channing, William Ellery,"},{"d":"1817-1901."}]}},{"852":{"ind1":"1","ind2":" ","subfields":[{"a":"MiU"},{"b":"BUHR"},{"c":"GRAD"},{"h":"828 C458O H88"}]}},{"970":{"ind1":" ","ind2":" ","subfields":[{"a":"BK"},{"b":"Book"}]}},{"970":{"ind1":" ","ind2":" ","subfields":[{"a":"BI"},{"b":"Biography"}]}},{"971":{"ind1":" ","ind2":" ","subfields":[{"a":"MiU"}]}},{"972":{"ind1":" ","ind2":" ","subfields":[{"c":"20040625"}]}},{"973":{"ind1":" ","ind2":" ","subfields":[{"a":"HT"},{"b":"avail_ht"}]}},{"973":{"ind1":" ","ind2":" ","subfields":[{"a":"AC"},{"b":"avail_circ"}]}},{"974":{"ind1":" ","ind2":" ","subfields":[{"u":"mdp.39015030727799"},{"r":"ic"},{"d":"20120530"}]}},{"998":{"ind1":" ","ind2":" ","subfields":[{"s":"9125"}]}}]}
|
86
|
+
{"leader":"01215nam a22004091 4500","fields":[{"001":"000010179"},{"003":"MiU"},{"005":"19880715000000.0"},{"006":"m d "},{"007":"cr bn ---auaua"},{"008":"880715s1962 nyu 00001 eng "},{"010":{"ind1":" ","ind2":" ","subfields":[{"a":"62009606/L/r66"}]}},{"035":{"ind1":" ","ind2":" ","subfields":[{"a":"(RLIN)MIUG0710844-B"}]}},{"035":{"ind1":" ","ind2":" ","subfields":[{"a":"(CaOTULAS)159829527"}]}},{"035":{"ind1":" ","ind2":" ","subfields":[{"a":"(OCoLC)ocm00710844"}]}},{"035":{"ind1":" ","ind2":" ","subfields":[{"a":"sdr-ucsc.b15850766"}]}},{"040":{"ind1":" ","ind2":" ","subfields":[{"a":"DLC"},{"c":"DLC"},{"d":"MiU"}]}},{"041":{"ind1":"1","ind2":" ","subfields":[{"a":"enggre"}]}},{"050":{"ind1":"0","ind2":" ","subfields":[{"a":"PZ3.K1884"},{"b":"Sai"}]}},{"100":{"ind1":"1","ind2":" ","subfields":[{"a":"Kazantzakis, Nikos,"},{"d":"1883-1957."}]}},{"240":{"ind1":"0","ind2":"3","subfields":[{"a":"Ho phtochoules tou Theou."},{"l":"English"}]}},{"245":{"ind1":"0","ind2":"0","subfields":[{"a":"Saint Francis,"},{"b":"a novel."},{"c":"Translated from the Greek by P. A. Bien."}]}},{"260":{"ind1":" ","ind2":" ","subfields":[{"a":"New York,"},{"b":"Simon and Schuster,"},{"c":"1962."}]}},{"300":{"ind1":" ","ind2":" ","subfields":[{"a":"379 p."},{"c":"22 cm."}]}},{"538":{"ind1":" ","ind2":" ","subfields":[{"a":"Mode of access: Internet."}]}},{"600":{"ind1":"0","ind2":"0","subfields":[{"a":"Francis,"},{"c":"of Assisi, Saint,"},{"d":"1182-1226"},{"x":"Fiction."}]}},{"852":{"ind1":"0","ind2":" ","subfields":[{"a":"MiU"},{"b":"HATCH"},{"c":"GRAD"},{"h":"PA 5610 .K23 P53"}]}},{"852":{"ind1":" ","ind2":" ","subfields":[{"a":"uc1"},{"b":"SDR"},{"c":"UCSC"}]}},{"970":{"ind1":" ","ind2":" ","subfields":[{"a":"BK"},{"b":"Book"}]}},{"971":{"ind1":" ","ind2":" ","subfields":[{"a":"MiU"}]}},{"972":{"ind1":" ","ind2":" ","subfields":[{"c":"20040625"}]}},{"973":{"ind1":" ","ind2":" ","subfields":[{"a":"HT"},{"b":"avail_ht"}]}},{"973":{"ind1":" ","ind2":" ","subfields":[{"a":"AC"},{"b":"avail_circ"}]}},{"974":{"ind1":" ","ind2":" ","subfields":[{"u":"mdp.39015002669383"},{"r":"ic"},{"d":"20120530"}]}},{"974":{"ind1":" ","ind2":" ","subfields":[{"u":"uc1.32106006141748"},{"r":"ic"},{"d":"20100906"}]}},{"974":{"ind1":" ","ind2":" ","subfields":[{"u":"uc1.32106016310622"},{"r":"ic"},{"d":"20100906"}]}},{"998":{"ind1":" ","ind2":" ","subfields":[{"s":"9665"}]}}]}
|
87
|
+
|
@@ -0,0 +1,34 @@
|
|
1
|
+
# A writer for Traject::Indexer, that just writes out
|
2
|
+
# all the output as serialized text with #puts.
|
3
|
+
#
|
4
|
+
# Should be thread-safe (ie, multiple worker threads can be calling #put
|
5
|
+
# concurrently), by wrapping write to actual output file in a mutex synchronize.
|
6
|
+
# This does not seem to effect performance much, as far as I could tell
|
7
|
+
# benchmarking.
|
8
|
+
#
|
9
|
+
# Output will be sent to settings["output_file"] string path, or else
|
10
|
+
# settings["output_stream"] (ruby IO object), or else stdout.
|
11
|
+
#
|
12
|
+
# This class can be sub-classed to write out different serialized
|
13
|
+
# reprentations -- subclasses will just override the #serialize
|
14
|
+
# method. For instance, see JsonWriter.
|
15
|
+
class Traject::MockWriter
|
16
|
+
attr_reader :settings
|
17
|
+
|
18
|
+
def initialize(argSettings)
|
19
|
+
end
|
20
|
+
|
21
|
+
|
22
|
+
def serialize(context)
|
23
|
+
# null
|
24
|
+
end
|
25
|
+
|
26
|
+
def put(context)
|
27
|
+
# null
|
28
|
+
end
|
29
|
+
|
30
|
+
def close
|
31
|
+
# null
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
data/lib/traject/solrj_writer.rb
CHANGED
@@ -114,28 +114,7 @@ class Traject::SolrJWriter
|
|
114
114
|
# in settings["solrj.jar_dir"]
|
115
115
|
def ensure_solrj_loaded!
|
116
116
|
unless defined?(HttpSolrServer) && defined?(SolrInputDocument)
|
117
|
-
|
118
|
-
|
119
|
-
tries = 0
|
120
|
-
begin
|
121
|
-
tries += 1
|
122
|
-
java_import org.apache.solr.client.solrj.impl.HttpSolrServer
|
123
|
-
java_import org.apache.solr.common.SolrInputDocument
|
124
|
-
rescue NameError => e
|
125
|
-
# /Users/jrochkind/code/solrj-gem/lib"
|
126
|
-
|
127
|
-
included_jar_dir = File.expand_path("../../vendor/solrj/lib", File.dirname(__FILE__))
|
128
|
-
|
129
|
-
jardir = settings["solrj.jar_dir"] || included_jar_dir
|
130
|
-
Dir.glob("#{jardir}/*.jar") do |x|
|
131
|
-
require x
|
132
|
-
end
|
133
|
-
if tries > 1
|
134
|
-
raise LoadError.new("Can not find SolrJ java classes")
|
135
|
-
else
|
136
|
-
retry
|
137
|
-
end
|
138
|
-
end
|
117
|
+
Traject::Util.require_solrj_jars(settings)
|
139
118
|
end
|
140
119
|
|
141
120
|
# And for now, SILENCE SolrJ logging
|
data/lib/traject/util.rb
CHANGED
@@ -21,10 +21,116 @@ module Traject
|
|
21
21
|
end
|
22
22
|
|
23
23
|
# From ruby #caller method, you get an array. Pass one line
|
24
|
-
# of the array here, get just file and line number out.
|
24
|
+
# of the array here, get just file and line number out.
|
25
25
|
def self.extract_caller_location(str)
|
26
26
|
str.split(':in `').first
|
27
27
|
end
|
28
28
|
|
29
|
+
# Requires marc4j jar(s) from settings['marc4j.jar_dir'] if given, otherwise
|
30
|
+
# uses jars bundled with traject gem in ./vendor
|
31
|
+
#
|
32
|
+
# Have to pass in a settings arg, so we can check it for specified jar dir.
|
33
|
+
#
|
34
|
+
# Tries not to do the dirglob and require if marc4j has already been loaded.
|
35
|
+
# Will define global constants with classes MarcPermissiveStreamReader and MarcXmlReader
|
36
|
+
# if not already defined.
|
37
|
+
#
|
38
|
+
# This is all a bit janky, maybe there's a better way to do this? We do want
|
39
|
+
# a 'require' method defined somewhere utility, so multiple classes can
|
40
|
+
# use it, including extra gems. This method IS used by extra gems, so should
|
41
|
+
# be considered part of the API -- after it's called, those top-level
|
42
|
+
# globals should be available, and marc4j should be loaded.
|
43
|
+
def self.require_marc4j_jars(settings)
|
44
|
+
jruby_ensure_init!
|
45
|
+
|
46
|
+
tries = 0
|
47
|
+
begin
|
48
|
+
tries += 1
|
49
|
+
|
50
|
+
org.marc4j
|
51
|
+
|
52
|
+
# java_import which we'd normally use weirdly doesn't work
|
53
|
+
# from a class method. https://github.com/jruby/jruby/issues/975
|
54
|
+
Object.const_set("MarcPermissiveStreamReader", org.marc4j.MarcPermissiveStreamReader) unless defined? ::MarcPermissiveStreamReader
|
55
|
+
Object.const_set("MarcXmlReader", org.marc4j.MarcXmlReader) unless defined? ::MarcXmlReader
|
56
|
+
rescue NameError => e
|
57
|
+
# /Users/jrochkind/code/solrj-gem/lib"
|
58
|
+
|
59
|
+
include_jar_dir = File.expand_path("../../vendor/marc4j/lib", File.dirname(__FILE__))
|
60
|
+
|
61
|
+
jardir = settings["marc4j.jar_dir"] || include_jar_dir
|
62
|
+
Dir.glob("#{jardir}/*.jar") do |x|
|
63
|
+
require x
|
64
|
+
end
|
65
|
+
|
66
|
+
if tries > 1
|
67
|
+
raise LoadError.new("Can not find Marc4J java classes")
|
68
|
+
else
|
69
|
+
retry
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
# Requires solrj jar(s) from settings['solrj.jar_dir'] if given, otherwise
|
75
|
+
# uses jars bundled with traject gem in ./vendor
|
76
|
+
#
|
77
|
+
# Have to pass in a settings arg, so we can check it for specified jar dir.
|
78
|
+
#
|
79
|
+
# Tries not to do the dirglob and require if solrj has already been loaded.
|
80
|
+
# Will define global constants with classes HttpSolrServer and SolrInputDocument
|
81
|
+
# if not already defined.
|
82
|
+
#
|
83
|
+
# This is all a bit janky, maybe there's a better way to do this? We do want
|
84
|
+
# a 'require' method defined somewhere utility, so multiple classes can
|
85
|
+
# use it, including extra gems. This method may be used by extra gems, so should
|
86
|
+
# be considered part of the API -- after it's called, those top-level
|
87
|
+
# globals should be available, and solrj should be loaded.
|
88
|
+
def self.require_solrj_jars(settings)
|
89
|
+
jruby_ensure_init!
|
90
|
+
|
91
|
+
tries = 0
|
92
|
+
begin
|
93
|
+
tries += 1
|
94
|
+
|
95
|
+
org.apache.solr
|
96
|
+
org.apache.solr.client.solrj
|
97
|
+
|
98
|
+
# java_import which we'd normally use weirdly doesn't work
|
99
|
+
# from a class method. https://github.com/jruby/jruby/issues/975
|
100
|
+
Object.const_set("HttpSolrServer", org.apache.solr.client.solrj.impl.HttpSolrServer) unless defined? ::HttpSolrServer
|
101
|
+
Object.const_set("SolrInputDocument", org.apache.solr.common.SolrInputDocument) unless defined? ::SolrInputDocument
|
102
|
+
rescue NameError => e
|
103
|
+
# /Users/jrochkind/code/solrj-gem/lib"
|
104
|
+
|
105
|
+
included_jar_dir = File.expand_path("../../vendor/solrj/lib", File.dirname(__FILE__))
|
106
|
+
|
107
|
+
jardir = settings["solrj.jar_dir"] || included_jar_dir
|
108
|
+
Dir.glob("#{jardir}/*.jar") do |x|
|
109
|
+
require x
|
110
|
+
end
|
111
|
+
if tries > 1
|
112
|
+
raise LoadError.new("Can not find SolrJ java classes")
|
113
|
+
else
|
114
|
+
retry
|
115
|
+
end
|
116
|
+
end
|
117
|
+
end
|
118
|
+
|
119
|
+
# just does a `require 'java'` but rescues the exception if we
|
120
|
+
# aren't jruby, and raises a better error message.
|
121
|
+
# Pass in a developer-presentable name of a feature to include in the error
|
122
|
+
# message if you want.
|
123
|
+
def self.jruby_ensure_init!(feature = nil)
|
124
|
+
begin
|
125
|
+
require 'java'
|
126
|
+
rescue LoadError => e
|
127
|
+
feature ||= "A traject feature is in use that"
|
128
|
+
msg = if feature
|
129
|
+
"#{feature} requires jruby, but you do not appear to be running under jruby. We recommend `chruby` for managing multiple ruby installs."
|
130
|
+
end
|
131
|
+
raise LoadError.new(msg)
|
132
|
+
end
|
133
|
+
end
|
134
|
+
|
29
135
|
end
|
30
136
|
end
|