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/'.freeze
- XMLNS_DC =
'http://purl.org/dc/elements/1.1/'.freeze
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
84 85 86 |
# File 'lib/dor/models/concerns/describable.rb', line 84 def self.get_collection_title(obj) obj.full_title end |
Instance Method Details
#build_descMetadata_datastream(ds) ⇒ Object
35 36 37 38 39 40 41 42 |
# File 'lib/dor/models/concerns/describable.rb', line 35 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
29 30 31 32 33 |
# File 'lib/dor/models/concerns/describable.rb', line 29 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
88 89 90 |
# File 'lib/dor/models/concerns/describable.rb', line 88 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
48 49 50 51 52 53 54 55 56 57 58 59 60 |
# File 'lib/dor/models/concerns/describable.rb', line 48 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.
63 64 65 |
# File 'lib/dor/models/concerns/describable.rb', line 63 def generate_public_desc_md(**) PublicDescMetadataService.new(self).to_xml(**) end |
#set_desc_metadata_using_label(force = false) ⇒ String
Returns descMetadata.content XML.
69 70 71 72 73 74 75 76 77 78 79 80 81 82 |
# File 'lib/dor/models/concerns/describable.rb', line 69 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()
20 21 22 23 24 25 26 27 |
# File 'lib/dor/models/concerns/describable.rb', line 20 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 |