Module: Dor::Describable
- Extended by:
- ActiveSupport::Concern
- Included in:
- Abstract
- Defined in:
- lib/dor/models/concerns/describable.rb
Defined Under Namespace
Classes: CrosswalkError
Constant Summary collapse
- MODS_TO_DC_XSLT =
Nokogiri::XSLT(File.new(File.(File.dirname(__FILE__) + "/mods2dc.xslt")))
- XMLNS_OAI_DC =
'http://www.openarchives.org/OAI/2.0/oai_dc/'
- XMLNS_DC =
'http://purl.org/dc/elements/1.1/'
Class Method Summary collapse
Instance Method Summary collapse
- #build_descMetadata_datastream(ds) ⇒ Object
- #fetch_descMetadata_datastream ⇒ Object
- #full_title ⇒ Object
-
#generate_dublin_core(include_collection_as_related_item: true) ⇒ Nokogiri::Doc
Generates Dublin Core from the MODS in the descMetadata datastream using the LoC mods2dc stylesheet Should not be used for the Fedora DC datastream.
-
#generate_public_desc_md(**options) ⇒ String
Public descriptive medatada XML.
-
#set_desc_metadata_using_label(force = false) ⇒ String
DescMetadata.content XML.
-
#stanford_mods(content = nil, ns_aware = true) ⇒ Object
intended for read-access, “as SearchWorks would see it”, mostly for to_solr().
Class Method Details
.get_collection_title(obj) ⇒ Object
89 90 91 |
# File 'lib/dor/models/concerns/describable.rb', line 89 def self.get_collection_title(obj) obj.full_title end |
Instance Method Details
#build_descMetadata_datastream(ds) ⇒ Object
37 38 39 40 41 42 43 44 45 |
# File 'lib/dor/models/concerns/describable.rb', line 37 def build_descMetadata_datastream(ds) content = fetch_descMetadata_datastream return nil if content.nil? ds.dsLabel = 'Descriptive Metadata' ds.ng_xml = Nokogiri::XML(content) ds.ng_xml.normalize_text! ds.content = ds.ng_xml.to_xml end |
#fetch_descMetadata_datastream ⇒ Object
31 32 33 34 35 |
# File 'lib/dor/models/concerns/describable.rb', line 31 def fetch_descMetadata_datastream candidates = datastreams['identityMetadata'].otherId.collect { |oid| oid.to_s } = Dor::MetadataService.resolvable(candidates).first .nil? ? nil : Dor::MetadataService.fetch(.to_s) end |
#full_title ⇒ Object
93 94 95 |
# File 'lib/dor/models/concerns/describable.rb', line 93 def full_title stanford_mods.sw_title_display end |
#generate_dublin_core(include_collection_as_related_item: true) ⇒ Nokogiri::Doc
Generates Dublin Core from the MODS in the descMetadata datastream using the LoC mods2dc stylesheet
Should not be used for the Fedora DC datastream
51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
# File 'lib/dor/models/concerns/describable.rb', line 51 def generate_dublin_core(include_collection_as_related_item: true) desc_md = if Nokogiri::XML(generate_public_desc_md(include_access_conditions: false)) else descMetadata.ng_xml end dc_doc = MODS_TO_DC_XSLT.transform(desc_md) dc_doc.xpath('/oai_dc:dc/*[count(text()) = 0]', oai_dc: XMLNS_OAI_DC).remove # Remove empty nodes raise CrosswalkError, "Dor::Item#generate_dublin_core produced incorrect xml (no root):\n#{dc_doc.to_xml}" if dc_doc.root.nil? raise CrosswalkError, "Dor::Item#generate_dublin_core produced incorrect xml (no children):\n#{dc_doc.to_xml}" if dc_doc.root.children.size == 0 dc_doc end |
#generate_public_desc_md(**options) ⇒ String
Returns Public descriptive medatada XML.
67 68 69 |
# File 'lib/dor/models/concerns/describable.rb', line 67 def generate_public_desc_md(**) PublicDescMetadataService.new(self).to_xml(**) end |
#set_desc_metadata_using_label(force = false) ⇒ String
Returns descMetadata.content XML.
73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 |
# File 'lib/dor/models/concerns/describable.rb', line 73 def (force = false) unless force || descMetadata.new? raise 'Cannot proceed, there is already content in the descriptive metadata datastream: ' + descMetadata.content.to_s end label = self.label builder = Nokogiri::XML::Builder.new { |xml| xml.mods(Dor::DescMetadataDS::MODS_HEADER_CONFIG) { xml.titleInfo { xml.title label } } } descMetadata.content = builder.to_xml end |
#stanford_mods(content = nil, ns_aware = true) ⇒ Object
intended for read-access, “as SearchWorks would see it”, mostly for to_solr()
22 23 24 25 26 27 28 29 |
# File 'lib/dor/models/concerns/describable.rb', line 22 def stanford_mods(content = nil, ns_aware = true) @stanford_mods ||= begin m = Stanford::Mods::Record.new desc = content.nil? ? descMetadata.ng_xml : content m.from_nk_node(desc.root, ns_aware) m end end |