lib/ddr/datastreams/descriptive_metadata_datastream.rb
require "rdf/vocab"
module Ddr::Datastreams
class DescriptiveMetadataDatastream < MetadataDatastream
class_attribute :vocabularies
self.vocabularies = [RDF::Vocab::DC, Ddr::Vocab::DukeTerms].freeze
def self.default_attributes
super.merge(:mimeType => 'application/n-triples')
end
def self.indexers
# Add term_name => [indexers] mapping to customize indexing
{}
end
def self.default_indexers
[:stored_searchable]
end
def self.indexers_for(term_name)
indexers.fetch(term_name, default_indexers)
end
# Add terms from the vocabularies as properties
vocabularies.each do |vocab|
Ddr::Vocab::Vocabulary.property_terms(vocab).each do |term|
term_name = Ddr::Vocab::Vocabulary.term_name(vocab, term)
# Do not include :license as a descriptive metadata property
unless term_name == :license
property term_name, predicate: term do |index|
index.as *indexers_for(term_name)
end
end
end
end
# Override ActiveFedora::Rdf::Indexing#apply_prefix(name) to not
# prepend the index field name with a string based on the datastream id.
def apply_prefix(name)
name
end
end
end