hydra-pbcore 1.0.0 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (49) hide show
  1. data/.gitignore +1 -0
  2. data/Rakefile +6 -0
  3. data/lib/hydra-pbcore.rb +60 -1
  4. data/lib/hydra-pbcore/behaviors.rb +4 -2
  5. data/lib/hydra-pbcore/conversions.rb +88 -0
  6. data/lib/hydra-pbcore/datastream/{digital_document.rb → deprecated/digital_document.rb} +3 -2
  7. data/lib/hydra-pbcore/datastream/deprecated/document.rb +310 -0
  8. data/lib/hydra-pbcore/datastream/deprecated/instantiation.rb +261 -0
  9. data/lib/hydra-pbcore/datastream/document.rb +37 -139
  10. data/lib/hydra-pbcore/datastream/instantiation.rb +184 -223
  11. data/lib/hydra-pbcore/methods.rb +23 -2
  12. data/lib/hydra-pbcore/templates.rb +116 -0
  13. data/lib/hydra-pbcore/version.rb +1 -1
  14. data/spec/{digital_document_spec.rb → deprecated/digital_document_spec.rb} +6 -26
  15. data/spec/deprecated/document_spec.rb +282 -0
  16. data/spec/deprecated/instantiation_spec.rb +214 -0
  17. data/spec/document_spec.rb +71 -194
  18. data/spec/fixtures/converted_digital_document_rrhof_1904.xml +53 -0
  19. data/spec/fixtures/converted_digital_document_rrhof_2405.xml +46 -0
  20. data/spec/fixtures/converted_document_rrhof_2439.xml +19 -0
  21. data/spec/fixtures/converted_document_rrhof_524.xml +45 -0
  22. data/spec/fixtures/converted_instantiation_rrhof_1184.xml +39 -0
  23. data/spec/fixtures/converted_rrhof_524.xml +45 -0
  24. data/spec/fixtures/converted_rrhof_524_instantiation.xml +18 -0
  25. data/spec/fixtures/{pbcore_digital_document_template.xml → deprecated/pbcore_digital_document_template.xml} +0 -0
  26. data/spec/fixtures/{pbcore_document_template.xml → deprecated/pbcore_document_template.xml} +0 -0
  27. data/spec/fixtures/{pbcore_instantiation_template.xml → deprecated/pbcore_instantiation_template.xml} +0 -0
  28. data/spec/fixtures/{pbcore_solr_digital_document_template.xml → deprecated/pbcore_solr_digital_document_template.xml} +0 -0
  29. data/spec/fixtures/{pbcore_solr_document_template.xml → deprecated/pbcore_solr_document_template.xml} +0 -0
  30. data/spec/fixtures/{pbcore_solr_instantiation_template.xml → deprecated/pbcore_solr_instantiation_template.xml} +0 -0
  31. data/spec/fixtures/digital_instantiation.xml +56 -0
  32. data/spec/fixtures/digital_instantiation_solr.xml +1913 -0
  33. data/spec/fixtures/digital_instantiation_template.xml +33 -0
  34. data/spec/fixtures/document.xml +72 -0
  35. data/spec/fixtures/document_solr.xml +582 -0
  36. data/spec/fixtures/document_template.xml +30 -0
  37. data/spec/fixtures/integration/digital_document_rrhof_1904.xml +63 -0
  38. data/spec/fixtures/integration/digital_document_rrhof_2405.xml +62 -0
  39. data/spec/fixtures/integration/document_rrhof_2439.xml +54 -0
  40. data/spec/fixtures/integration/document_rrhof_524.xml +80 -0
  41. data/spec/fixtures/integration/instantiation_rrhof_1184.xml +44 -0
  42. data/spec/fixtures/physical_instantiation.xml +20 -0
  43. data/spec/fixtures/physical_instantiation_solr.xml +441 -0
  44. data/spec/fixtures/physical_instantiation_template.xml +18 -0
  45. data/spec/instantiation_spec.rb +180 -132
  46. data/spec/integration/conversions_spec.rb +73 -0
  47. data/spec/spec_helper.rb +37 -9
  48. data/spec/templates_spec.rb +31 -0
  49. metadata +68 -17
data/.gitignore CHANGED
@@ -1,5 +1,6 @@
1
1
  *.gem
2
2
  *.rbc
3
+ *.DS_Store
3
4
  .bundle
4
5
  .config
5
6
  .yardoc
data/Rakefile CHANGED
@@ -1,2 +1,8 @@
1
1
  #!/usr/bin/env rake
2
2
  require "bundler/gem_tasks"
3
+
4
+ # Rake task for getting an irb session
5
+ desc "Open an irb session preloaded with this library"
6
+ task :console do
7
+ sh "irb -rubygems -I lib -r hydra-pbcore.rb"
8
+ end
data/lib/hydra-pbcore.rb CHANGED
@@ -5,15 +5,74 @@ require "om"
5
5
  require "active-fedora"
6
6
 
7
7
  module HydraPbcore
8
+
9
+ DocumentNodes = [
10
+ "pbcoreAssetType",
11
+ "pbcoreAssetDate",
12
+ "pbcoreIdentifier",
13
+ "pbcoreTitle",
14
+ "pbcoreSubject",
15
+ "pbcoreDescription",
16
+ "pbcoreGenre",
17
+ "pbcoreRelation",
18
+ "pbcoreCoverage",
19
+ "pbcoreAudienceLevel",
20
+ "pbcoreAudienceRating",
21
+ "pbcoreCreator",
22
+ "pbcoreContributor",
23
+ "pbcorePublisher",
24
+ "pbcoreRightsSummary",
25
+ "pbcoreInstantiation",
26
+ "pbcoreAnnotation",
27
+ "pbcorePart",
28
+ "pbcoreExtension",
29
+ ]
30
+
31
+ InstantiationNodes = [
32
+ "instantiationIdentifier",
33
+ "instantiationDate",
34
+ "instantiationDimensions",
35
+ "instantiationPhysical",
36
+ "instantiationDigital",
37
+ "instantiationStandard",
38
+ "instantiationLocation",
39
+ "instantiationMediaType",
40
+ "instantiationGenerations",
41
+ "instantiationFileSize",
42
+ "instantiationTimeStart",
43
+ "instantiationDuration",
44
+ "instantiationDataRate",
45
+ "instantiationColors",
46
+ "instantiationTracks",
47
+ "instantiationChannelConfiguration",
48
+ "instantiationLanguage",
49
+ "instantiationAlternativeModes",
50
+ "instantiationEssenceTrack",
51
+ "instantiationRelation",
52
+ "instantiationRights",
53
+ "instantiationAnnotation",
54
+ "instantiationPart",
55
+ "instantiationExtension",
56
+ ]
57
+
8
58
  def self.version
9
59
  HydraPbcore::VERSION
10
60
  end
61
+
62
+ # Returns a blank pbccoreDocument
63
+ def self.blank
64
+ xml = '<?xml version="1.0"?><pbcoreDescriptionDocument xmlns="http://www.pbcore.org/PBCore/PBCoreNamespace.html" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.pbcore.org/PBCore/PBCoreNamespace.html" xsi:schemaLocation="http://www.pbcore.org/PBCore/PBCoreNamespace.html"></pbcoreDescriptionDocument>'
65
+ Nokogiri::XML(xml)
66
+ end
11
67
  end
12
68
 
13
69
  require "hydra-pbcore/methods"
70
+ require "hydra-pbcore/conversions"
14
71
  require "hydra-pbcore/behaviors"
15
72
  require "hydra-pbcore/templates"
16
73
  require "custom_mapper"
17
74
  require "hydra-pbcore/datastream/document"
18
75
  require "hydra-pbcore/datastream/instantiation"
19
- require "hydra-pbcore/datastream/digital_document"
76
+ require "hydra-pbcore/datastream/deprecated/document"
77
+ require "hydra-pbcore/datastream/deprecated/digital_document"
78
+ require "hydra-pbcore/datastream/deprecated/instantiation"
@@ -1,10 +1,11 @@
1
1
  module HydraPbcore
2
2
  class Behaviors
3
3
 
4
- # This module is a work in progress
4
+ # This module is deprecated and will be removed in release 2.0.0
5
5
 
6
6
  # Nokogiri's add_namespace doesn't seem to work, so we have to insert it "manually"
7
7
  def self.insert_pbcore_namespace(doc)
8
+ puts "WARNING: HydraPbcore::Behaviors is deprecated and will be removed in release 2.0"
8
9
  index = doc.to_s.index("xmlns:xsi")
9
10
  new_s = doc.to_s.insert(index.to_i, 'xmlns="http://www.pbcore.org/PBCore/PBCoreNamespace.html" ')
10
11
  new_doc = Nokogiri::XML(new_s)
@@ -14,6 +15,7 @@ class Behaviors
14
15
  # Validates a PBCore document against an xsd
15
16
  # Returns an array of errors -- an empty array means it's valid
16
17
  def self.validate(doc)
18
+ puts "WARNING: HydraPbcore::Behaviors is deprecated and will be removed in release 2.0"
17
19
  xsd = Nokogiri::XML::Schema(open("http://pbcore.org/xsd/pbcore-2.0.xsd"))
18
20
  xsd.validate(doc)
19
21
  end
@@ -21,7 +23,7 @@ class Behaviors
21
23
 
22
24
  # Reorders the nodes of pbcoreDescriptionDocument to conform with the correct order
23
25
  def self.reorder_document(doc)
24
-
26
+ puts "WARNING: HydraPbcore::Behaviors is deprecated and will be removed in release 2.0"
25
27
  nodes = [
26
28
  "pbcoreAssetType",
27
29
  "pbcoreAssetDate",
@@ -0,0 +1,88 @@
1
+ # Methods for converting HydraPbcore 1.x datastreams to HydraPbcore 2.x datastreams
2
+ #
3
+ # Verion 1.x of the HydraPbcore gem uses two kinds of pbcoreDocuments, one which includes an instantation
4
+ # and one which does not. Version 2 of the gem refactors these so that there
5
+ # is only one kind of pbcoreDocument and two kinds of instatiations. This offers greater flexibility
6
+ # as any number of instantiations may be attached to a document. Instatntiations come in two types,
7
+ # one is physical, meaning it represents a tape or other
8
+ # tangible object on which the video content resides, while the other kind is
9
+ # digital, representing a video file.
10
+ #
11
+ # These methods attempt to correct invalid or inconsistent xml created using the first version of the
12
+ # gem.
13
+
14
+ module HydraPbcore::Conversions
15
+
16
+ # Converts a HydraPbcore::Datastream::Deprecated::Document to a HydraPbcore::Datastream::Document
17
+ # - the existing pbcoreInstantiation node is removed
18
+ # - any pbcoreRelation or pbcoreRelationIdentifier is removed except for terms identifying "Event Series"
19
+ def to_document
20
+ raise "only works with HydraPbcore::Datastream::Deprecated::Document" unless self.kind_of?(HydraPbcore::Datastream::Deprecated::Document)
21
+ self.remove_node(:pbcoreInstantiation)
22
+ self.dirty = true
23
+ end
24
+
25
+ # Extracts the instantation from a HydraPbcore::Datastream::Deprecated::Document and returns
26
+ # a physical HydraPbcore::Datastream::Instantion
27
+ # - removes all instantiationRelation nodes
28
+ # - adds source="PBCore instantiationColors" to instantiationColors node
29
+ # - extracts the pbcoreInstantiation node and returns new Instantiation object
30
+ def to_physical_instantiation(xml = self.ng_xml)
31
+ raise "only works with HydraPbcore::Datastream::Deprecated::Document" unless self.kind_of?(HydraPbcore::Datastream::Deprecated::Document)
32
+ xml.search("//instantiationRelation").each do |node|
33
+ node.remove
34
+ end
35
+ xml.search("//instantiationColors").first["source"] = "PBCore instantiationColors"
36
+ inst_xml = xml.xpath("//pbcoreInstantiation")
37
+ HydraPbcore::Datastream::Instantiation.from_xml(inst_xml.to_xml)
38
+ end
39
+
40
+ # Converts a HydraPbcore::Datastream::Deprecated::Instantiation to a HydraPbcore::Datastream::Instantiation
41
+ # Modifies the exiting xml to exclude any parent nodes of the pbcoreInstantiation node
42
+ def to_instantiation
43
+ raise "only works with HydraPbcore::Datastream::Deprecated::Instantiation" unless self.kind_of?(HydraPbcore::Datastream::Deprecated::Instantiation)
44
+ self.ng_xml = self.ng_xml.xpath("//pbcoreInstantiation").to_xml
45
+ end
46
+
47
+ # Corrects errors in HydraPbcore::Datastream::Deprecated::Document and HydraPbcore::Datastream::Deprecated::DigitalDocument
48
+ # - removes all pbcoreRelation nodes, except those that define event_series
49
+ # - removes orphaned pbcoreRelationIdentifier nodes
50
+ # - corrects invalid usage of event_place and event_series terms
51
+ #
52
+ # Note: Since pbcoreRelation is used to indicated archival collection and series, this information should be copied to another kind
53
+ # of datastream using an RDF relationship in Hydra.
54
+ def clean_document(xml = self.ng_xml)
55
+ xml.search("//pbcoreRelation").each do |node|
56
+ node.remove unless is_event_series?(node)
57
+ end
58
+ xml.search("/pbcoreDescriptionDocument/pbcoreRelationIdentifier").collect {|n| n.remove}
59
+ xml.search("//pbcoreCoverage").each do |node|
60
+ node.children.each do |c|
61
+ if c.attribute("annotation").nil? and c.name == "coverage"
62
+ self.send(("insert_"+coverage_type(node)), c.text)
63
+ c.remove
64
+ end
65
+ end
66
+ end
67
+ end
68
+
69
+ # Determines if the given node defines an event_series term
70
+ def is_event_series?(node)
71
+ unless node.at_xpath("pbcoreRelationIdentifier").nil?
72
+ if node.at_xpath("pbcoreRelationIdentifier").attribute("annotation").to_s == "Event Series"
73
+ return true
74
+ end
75
+ end
76
+ end
77
+
78
+ # Determines if a coverage node that has no annotation attribute should be either an event_date term or an event_date term.
79
+ # Returns the first instance of an annotation attribute, processing it so that may be sent directly to
80
+ # the datastream as a method.
81
+ def coverage_type(node)
82
+ node.children.each do |c|
83
+ return c.attribute("annotation").to_s.split.last.downcase unless c.attribute("annotation").nil?
84
+ end
85
+ end
86
+
87
+
88
+ end
@@ -1,10 +1,11 @@
1
- module HydraPbcore::Datastream
1
+ module HydraPbcore::Datastream::Deprecated
2
2
  class DigitalDocument < ActiveFedora::NokogiriDatastream
3
3
 
4
4
  include HydraPbcore::Methods
5
5
  include HydraPbcore::Templates
6
+ include HydraPbcore::Conversions
6
7
 
7
- @terminology = HydraPbcore::Datastream::Document.terminology
8
+ @terminology = HydraPbcore::Datastream::Deprecated::Document.terminology
8
9
 
9
10
  def self.xml_template
10
11
  builder = Nokogiri::XML::Builder.new do |xml|
@@ -0,0 +1,310 @@
1
+ module HydraPbcore::Datastream::Deprecated
2
+ class Document < ActiveFedora::NokogiriDatastream
3
+
4
+ include HydraPbcore::Methods
5
+ include HydraPbcore::Templates
6
+ include HydraPbcore::Conversions
7
+
8
+ set_terminology do |t|
9
+ t.root(:path=>"pbcoreDescriptionDocument")
10
+
11
+ #
12
+ # pbcoreDescription fields
13
+ #
14
+ t.pbc_id(:path=>"pbcoreIdentifier",
15
+ :attributes=>{ :source=>"Rock and Roll Hall of Fame and Museum", :annotation=>"PID" }
16
+ )
17
+
18
+ t.main_title(:path=>"pbcoreTitle", :attributes=>{ :titleType=>"Main" }, :index_as => [:searchable, :displayable])
19
+ t.alternative_title(:path=>"pbcoreTitle", :attributes=>{ :titleType=>"Alternative" },
20
+ :index_as => [:searchable, :displayable]
21
+ )
22
+ t.chapter(:path=>"pbcoreTitle", :attributes=>{ :titleType=>"Chapter" }, :index_as => [:searchable, :displayable])
23
+ t.episode(:path=>"pbcoreTitle", :attributes=>{ :titleType=>"Episode" }, :index_as => [:searchable, :displayable])
24
+ t.label(:path=>"pbcoreTitle", :attributes=>{ :titleType=>"Label" }, :index_as => [:searchable, :displayable])
25
+ t.segment(:path=>"pbcoreTitle", :attributes=>{ :titleType=>"Segment" }, :index_as => [:searchable, :displayable])
26
+ t.subtitle(:path=>"pbcoreTitle", :attributes=>{ :titleType=>"Subtitle" }, :index_as => [:searchable, :displayable])
27
+ t.track(:path=>"pbcoreTitle", :attributes=>{ :titleType=>"Track" }, :index_as => [:searchable, :displayable])
28
+ t.translation(:path=>"pbcoreTitle", :attributes=>{ :titleType=>"Translation" },
29
+ :index_as => [:searchable, :displayable]
30
+ )
31
+
32
+ # This is only to display all subjects
33
+ t.subject_topic(:path=>"pbcoreSubject", :index_as => [:searchable, :facetable])
34
+
35
+ # Individual subject types defined for entry
36
+ t.lc_subject(:path=>"pbcoreSubject",
37
+ :attributes=>{
38
+ :source=>"Library of Congress Subject Headings",
39
+ :ref=>"http://id.loc.gov/authorities/subjects.html"
40
+ },
41
+ :index_as => [:displayable]
42
+ )
43
+ t.lc_name(:path=>"pbcoreSubject",
44
+ :attributes=>{ :source=>"Library of Congress Name Authority File", :ref=>"http://id.loc.gov/authorities/names" },
45
+ :index_as => [:displayable]
46
+ )
47
+ t.rh_subject(:path=>"pbcoreSubject",
48
+ :attributes=>{ :source=>"Rock and Roll Hall of Fame and Museum" },
49
+ :index_as => [:displayable]
50
+ )
51
+
52
+ t.summary(:path=>"pbcoreDescription",
53
+ :attributes=>{
54
+ :descriptionType=>"Description",
55
+ :descriptionTypeSource=>"pbcoreDescription/descriptionType",
56
+ :descriptionTypeRef=>"http://pbcore.org/vocabularies/pbcoreDescription/descriptionType#description",
57
+ :annotation=>"Summary"
58
+ },
59
+ :index_as => [:searchable, :displayable]
60
+ )
61
+
62
+ t.parts_list(:path=>"pbcoreDescription",
63
+ :attributes=>{
64
+ :descriptionType=>"Table of Contents",
65
+ :descriptionTypeSource=>"pbcoreDescription/descriptionType",
66
+ :descriptionTypeRef=>"http://pbcore.org/vocabularies/pbcoreDescription/descriptionType#table-of-contents",
67
+ :annotation=>"Parts List"
68
+ },
69
+ :index_as => [:searchable, :displayable]
70
+ )
71
+
72
+ # This is only to display all genres
73
+ t.genres(:path=>"pbcoreGenre", :index_as => [:searchable, :facetable])
74
+
75
+ # Individual genre types defined for entry
76
+ t.getty_genre(:path=>"pbcoreGenre",
77
+ :attributes=>{
78
+ :source=>"The Getty Research Institute Art and Architecture Thesaurus",
79
+ :ref=>"http://www.getty.edu/research/tools/vocabularies/aat/index.html"
80
+ },
81
+ :index_as => [:displayable]
82
+ )
83
+ t.lc_genre(:path=>"pbcoreGenre",
84
+ :attributes=>{
85
+ :source=>"Library of Congress Genre/Form Terms",
86
+ :ref=>"http://id.loc.gov/authorities/genreForms.html"
87
+ },
88
+ :index_as => [:displayable]
89
+ )
90
+ t.lc_subject_genre(:path=>"pbcoreGenre",
91
+ :attributes=>{
92
+ :source=>"Library of Congress Subject Headings",
93
+ :ref=>"http://id.loc.gov/authorities/subjects.html"
94
+ },
95
+ :index_as => [:displayable]
96
+ )
97
+
98
+
99
+ # Series field
100
+ t.pbcoreRelation do
101
+ t.pbcoreRelationIdentifier(:attributes=>{ :annotation=>"Event Series" })
102
+ end
103
+ t.event_series(:ref=>[:pbcoreRelation, :pbcoreRelationIdentifier], :index_as => [:searchable, :displayable])
104
+
105
+ # Terms for time and place
106
+ t.event_place(:path=>"pbcoreCoverage/coverage",
107
+ :attributes => {:annotation=>"Event Place"},
108
+ :index_as => [:searchable, :displayable]
109
+ )
110
+ t.event_date(:path=>"pbcoreCoverage/coverage",
111
+ :attributes => {:annotation=>"Event Date"},
112
+ :index_as => [:not_searchable, :converted_date, :displayable]
113
+ )
114
+
115
+ # Contributor names and roles
116
+ t.contributor(:path=>"pbcoreContributor") do
117
+ t.name_(:path=>"contributor", :index_as => [:searchable, :facetable])
118
+ t.role_(:path=>"contributorRole",
119
+ :attributes=>{ :source=>"MARC relator terms" },
120
+ :index_as => [:searchable, :displayable]
121
+ )
122
+ end
123
+ t.contributor_name(:proxy=>[:contributor, :name])
124
+ t.contributor_role(:proxy=>[:contributor, :role])
125
+
126
+ # Publisher names and roles
127
+ t.publisher(:path=>"pbcorePublisher") do
128
+ t.name_(:path=>"publisher")
129
+ t.role_(:path=>"publisherRole", :attributes=>{ :source=>"PBCore publisherRole" })
130
+ end
131
+ t.publisher_name(:proxy=>[:publisher, :name], :index_as => [:searchable, :facetable])
132
+ t.publisher_role(:proxy=>[:publisher, :role], :index_as => [:searchable, :displayable])
133
+
134
+ t.note(:path=>"pbcoreAnnotation", :atttributes=>{ :annotationType=>"Notes" }, :index_as => [:searchable])
135
+
136
+ #
137
+ # pbcoreInstantiation fields for the physical item
138
+ #
139
+ t.pbcoreInstantiation do
140
+ t.instantiationIdentifier(:attributes=>{
141
+ :annotation=>"Barcode",
142
+ :source=>"Rock and Roll Hall of Fame and Museum"
143
+ })
144
+ t.instantiationDate(:attributes=>{ :dateType=>"created" })
145
+ t.instantiationPhysical(:attributes=>{ :source=>"PBCore instantiationPhysical" })
146
+ t.instantiationStandard
147
+ t.instantiationLocation
148
+ t.instantiationMediaType(:attributes=>{ :source=>"PBCore instantiationMediaType" })
149
+ t.instantiationGenerations(:attributes=>{ :source=>"PBCore instantiationGenerations" })
150
+ t.instantiationColors
151
+ t.instantiationLanguage(:attributes=>{
152
+ :source=>"ISO 639.2",
153
+ :ref=>"http://www.loc.gov/standards/iso639-2/php/code_list.php"
154
+ })
155
+ t.instantiationRelation do
156
+ t.arc_collection(:path=>"instantiationRelationIdentifier",
157
+ :attributes=>{ :annotation=>"Archival collection" },
158
+ :index_as => [:searchable, :facetable]
159
+ )
160
+ t.arc_series(:path=>"instantiationRelationIdentifier", :attributes=>{ :annotation=>"Archival Series" })
161
+ t.col_number(:path=>"instantiationRelationIdentifier", :attributes=>{ :annotation=>"Collection Number" })
162
+ t.acc_number(:path=>"instantiationRelationIdentifier", :attributes=>{ :annotation=>"Accession Number" })
163
+ end
164
+ t.instantiationRights do
165
+ t.rightsSummary
166
+ end
167
+ t.inst_cond_note(:path=>"instantiationAnnotation",
168
+ :attributes=>{ :annotationType=>"Condition Notes"},
169
+ :index_as => [:searchable, :displayable]
170
+ )
171
+ t.inst_clean_note(:path=>"instantiationAnnotation",
172
+ :attributes=>{ :annotationType=>"Cleaning Notes" },
173
+ :index_as => [:searchable, :displayable]
174
+ )
175
+ end
176
+ # Individual field names:
177
+ t.creation_date(:ref=>[:pbcoreInstantiation, :instantiationDate], :index_as => [:not_searchable, :converted_date, :displayable])
178
+ t.barcode(:ref=>[:pbcoreInstantiation, :instantiationIdentifier], :index_as => [:searchable, :displayable])
179
+ t.repository(:ref=>[:pbcoreInstantiation, :instantiationLocation], :index_as => [:searchable, :displayable])
180
+ t.format(:ref=>[:pbcoreInstantiation, :instantiationPhysical], :index_as => [:searchable, :facetable])
181
+ t.standard(:ref=>[:pbcoreInstantiation, :instantiationStandard], :index_as => [:searchable, :facetable])
182
+ t.media_type(:ref=>[:pbcoreInstantiation, :instantiationMediaType], :index_as => [:searchable, :facetable])
183
+ t.generation(:ref=>[:pbcoreInstantiation, :instantiationGenerations], :index_as => [:searchable, :displayable])
184
+ t.language(:ref=>[:pbcoreInstantiation, :instantiationLanguage], :index_as => [:searchable, :displayable])
185
+ t.colors(:ref=>[:pbcoreInstantiation, :instantiationColors], :index_as => [:searchable, :displayable])
186
+ t.archival_collection(
187
+ :ref=>[:pbcoreInstantiation, :instantiationRelation, :arc_collection],
188
+ :index_as => [:searchable, :facetable]
189
+ )
190
+ t.archival_series(
191
+ :ref=>[:pbcoreInstantiation, :instantiationRelation, :arc_series],
192
+ :index_as => [:searchable, :displayable]
193
+ )
194
+ t.collection_number(
195
+ :ref=>[:pbcoreInstantiation, :instantiationRelation, :col_number],
196
+ :index_as => [:searchable, :displayable]
197
+ )
198
+ t.accession_number(:ref=>[:pbcoreInstantiation, :instantiationRelation, :acc_number],
199
+ :index_as => [:searchable, :displayable]
200
+ )
201
+ t.usage(:ref=>[:pbcoreInstantiation, :instantiationRights, :rightsSummary],
202
+ :index_as => [:searchable, :displayable]
203
+ )
204
+
205
+ # Inserted terms
206
+ t.condition_note(:proxy=>[:pbcoreInstantiation, :inst_cond_note])
207
+ t.cleaning_note(:proxy=>[:pbcoreInstantiation, :inst_clean_note])
208
+ end
209
+
210
+ def self.xml_template
211
+ builder = Nokogiri::XML::Builder.new do |xml|
212
+
213
+ xml.pbcoreDescriptionDocument("xmlns:xsi"=>"http://www.w3.org/2001/XMLSchema-instance",
214
+ "xsi:schemaLocation"=>"http://www.pbcore.org/PBCore/PBCoreNamespace.html") {
215
+
216
+ xml.pbcoreIdentifier(:source=>"Rock and Roll Hall of Fame and Museum", :annotation=>"PID")
217
+ xml.pbcoreTitle(:titleType=>"Main")
218
+ xml.pbcoreDescription(:descriptionType=>"Description",
219
+ :descriptionTypeSource=>"pbcoreDescription/descriptionType",
220
+ :descriptionTypeRef=>"http://pbcore.org/vocabularies/pbcoreDescription/descriptionType#description",
221
+ :annotation=>"Summary"
222
+ )
223
+ xml.pbcoreDescription(:descriptionType=>"Table of Contents",
224
+ :descriptionTypeSource=>"pbcoreDescription/descriptionType",
225
+ :descriptionTypeRef=>"http://pbcore.org/vocabularies/pbcoreDescription/descriptionType#table-of-contents",
226
+ :annotation=>"Parts List"
227
+ )
228
+ xml.pbcoreRelation {
229
+ xml.pbcoreRelationType(:source=>"PBCore relationType", :ref=>"http://pbcore.org/vocabularies/relationType#is-part-of") {
230
+ xml.text "Is Part Of"
231
+ }
232
+ xml.pbcoreRelationIdentifier(:annotation=>"Event Series")
233
+ }
234
+ xml.pbcoreCoverage {
235
+ xml.coverage(:annotation=>"Event Place")
236
+ xml.coverageType {
237
+ xml.text "Spatial"
238
+ }
239
+ }
240
+ xml.pbcoreCoverage {
241
+ xml.coverage(:annotation=>"Event Date")
242
+ xml.coverageType {
243
+ xml.text "Temporal"
244
+ }
245
+ }
246
+ xml.pbcoreAnnotation(:annotationType=>"Notes")
247
+
248
+ #
249
+ # Default physical item
250
+ #
251
+ xml.pbcoreInstantiation {
252
+
253
+ # Item details
254
+ xml.instantiationIdentifier(:annotation=>"Barcode", :source=>"Rock and Roll Hall of Fame and Museum")
255
+ xml.instantiationDate(:dateType=>"created")
256
+ xml.instantiationPhysical(:source=>"PBCore instantiationPhysical")
257
+ xml.instantiationStandard
258
+ xml.instantiationLocation {
259
+ xml.text "Rock and Roll Hall of Fame and Museum,\n2809 Woodland Ave.,\nCleveland, OH, 44115\n216-515-1956\nlibrary@rockhall.org"
260
+ }
261
+ xml.instantiationMediaType(:source=>"PBCore instantiationMediaType") {
262
+ xml.text "Moving image"
263
+ }
264
+ xml.instantiationGenerations(:source=>"PBCore instantiationGenerations") {
265
+ xml.text "Original"
266
+ }
267
+ xml.instantiationColors {
268
+ xml.text "Color"
269
+ }
270
+ xml.instantiationLanguage(:source=>"ISO 639.2", :ref=>"http://www.loc.gov/standards/iso639-2/php/code_list.php") {
271
+ xml.text "eng"
272
+ }
273
+ xml.instantiationRelation {
274
+ xml.instantiationRelationType(:source=>"PBCore relationType", :ref=>"http://pbcore.org/vocabularies/relationType#is-part-of") {
275
+ xml.text "Is Part Of"
276
+ }
277
+ xml.instantiationRelationIdentifier(:annotation=>"Archival Collection")
278
+ }
279
+ xml.instantiationRelation {
280
+ xml.instantiationRelationType(:source=>"PBCore relationType", :ref=>"http://pbcore.org/vocabularies/relationType#is-part-of") {
281
+ xml.text "Is Part Of"
282
+ }
283
+ xml.instantiationRelationIdentifier(:annotation=>"Archival Series")
284
+ }
285
+ xml.instantiationRelation {
286
+ xml.instantiationRelationType(:source=>"PBCore relationType", :ref=>"http://pbcore.org/vocabularies/relationType#is-part-of") {
287
+ xml.text "Is Part Of"
288
+ }
289
+ xml.instantiationRelationIdentifier(:annotation=>"Collection Number")
290
+ }
291
+ xml.instantiationRelation {
292
+ xml.instantiationRelationType(:source=>"PBCore relationType", :ref=>"http://pbcore.org/vocabularies/relationType#is-part-of") {
293
+ xml.text "Is Part Of"
294
+ }
295
+ xml.instantiationRelationIdentifier(:annotation=>"Accession Number")
296
+ }
297
+ xml.instantiationRights {
298
+ xml.rightsSummary
299
+ }
300
+
301
+ }
302
+
303
+ }
304
+
305
+ end
306
+ return builder.doc
307
+ end
308
+
309
+ end
310
+ end