active-fedora 9.0.0.beta2 → 9.0.0.beta3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/config/jetty.yml +1 -1
- data/lib/active_fedora.rb +11 -3
- data/lib/active_fedora/associations/association_scope.rb +2 -2
- data/lib/active_fedora/associations/belongs_to_association.rb +2 -2
- data/lib/active_fedora/associations/collection_association.rb +13 -13
- data/lib/active_fedora/associations/has_and_belongs_to_many_association.rb +2 -2
- data/lib/active_fedora/associations/rdf.rb +2 -2
- data/lib/active_fedora/cleaner.rb +2 -6
- data/lib/active_fedora/fedora.rb +18 -0
- data/lib/active_fedora/fedora_attributes.rb +4 -4
- data/lib/active_fedora/file.rb +7 -0
- data/lib/active_fedora/fixity_service.rb +9 -1
- data/lib/active_fedora/indexing_service.rb +2 -7
- data/lib/active_fedora/loadable_from_json.rb +4 -0
- data/lib/active_fedora/om_datastream.rb +0 -4
- data/lib/active_fedora/qualified_dublin_core_datastream.rb +1 -1
- data/lib/active_fedora/query_result_builder.rb +56 -0
- data/lib/active_fedora/querying.rb +1 -1
- data/lib/active_fedora/rdf.rb +2 -1
- data/lib/active_fedora/rdf/fcrepo.rb +323 -9
- data/lib/active_fedora/rdf/fcrepo4.rb +7 -0
- data/lib/active_fedora/rdf/indexing.rb +1 -1
- data/lib/active_fedora/rdf/project_hydra.rb +12 -0
- data/lib/active_fedora/reflection.rb +4 -1
- data/lib/active_fedora/relation/finder_methods.rb +4 -4
- data/lib/active_fedora/simple_datastream.rb +11 -12
- data/lib/active_fedora/solr_instance_loader.rb +1 -1
- data/lib/active_fedora/solr_query_builder.rb +57 -0
- data/lib/active_fedora/solr_service.rb +22 -48
- data/lib/active_fedora/version.rb +1 -1
- data/lib/active_fedora/versionable.rb +12 -13
- data/spec/integration/associations_spec.rb +6 -6
- data/spec/integration/attributes_spec.rb +22 -6
- data/spec/integration/base_spec.rb +2 -2
- data/spec/integration/collection_association_spec.rb +9 -0
- data/spec/integration/file_spec.rb +30 -0
- data/spec/integration/full_featured_model_spec.rb +1 -1
- data/spec/integration/ntriples_datastream_spec.rb +5 -5
- data/spec/integration/om_datastream_spec.rb +1 -1
- data/spec/integration/{solr_service_spec.rb → query_result_builder_spec.rb} +5 -7
- data/spec/integration/relation_delegation_spec.rb +3 -3
- data/spec/integration/scoped_query_spec.rb +11 -11
- data/spec/integration/solr_instance_loader_spec.rb +8 -0
- data/spec/integration/versionable_spec.rb +32 -14
- data/spec/unit/base_spec.rb +3 -3
- data/spec/unit/indexing_service_spec.rb +2 -2
- data/spec/unit/ntriples_datastream_spec.rb +16 -16
- data/spec/unit/om_datastream_spec.rb +7 -7
- data/spec/unit/qualified_dublin_core_datastream_spec.rb +1 -1
- data/spec/unit/query_result_builder_spec.rb +39 -0
- data/spec/unit/query_spec.rb +2 -2
- data/spec/unit/rdf_vocab_spec.rb +30 -0
- data/spec/unit/simple_datastream_spec.rb +2 -2
- data/spec/unit/solr_config_options_spec.rb +1 -1
- data/spec/unit/solr_query_builder_spec.rb +20 -0
- data/spec/unit/solr_service_spec.rb +2 -53
- metadata +11 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 380da0e904e671fecd1e7cc340a7ff9e7e43ca89
|
4
|
+
data.tar.gz: 01155eab5f9d0480eefc945636a17c48707ddae7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 33fe88b57b1e02b8173754cbbac2a722f364b33d119375f2a3c1b1a44229040c779938896ac3abd15a58ef0647b591346fe161ab10b1f7e89b076a1f12d52929
|
7
|
+
data.tar.gz: a7b51616edde2428ac50bd8721f82d7db76e70d1532e02613b31e06e20a1b54d1d15826993d98763d3e592c78bc49953090b45805d9596b9dc6f618534f59f27
|
data/config/jetty.yml
CHANGED
data/lib/active_fedora.rb
CHANGED
@@ -19,12 +19,16 @@ module RDF
|
|
19
19
|
class Literal
|
20
20
|
class DateTime < Literal
|
21
21
|
ALTERNATIVE_FORMAT = '%Y-%m-%dT%H:%M:%S'.freeze
|
22
|
+
DOT = '.'.freeze
|
23
|
+
Z = 'Z'.freeze
|
24
|
+
EMPTY = ''.freeze
|
22
25
|
|
23
26
|
def to_s
|
24
27
|
@string ||= begin
|
25
|
-
|
26
|
-
nano = '.
|
27
|
-
|
28
|
+
# Show nanoseconds but remove trailing zeros
|
29
|
+
nano = @object.strftime('%N').sub(/0+\Z/, EMPTY)
|
30
|
+
nano = DOT + nano unless nano.blank?
|
31
|
+
@object.strftime(ALTERNATIVE_FORMAT) + nano + Z
|
28
32
|
end
|
29
33
|
end
|
30
34
|
end
|
@@ -69,6 +73,7 @@ module ActiveFedora #:nodoc:
|
|
69
73
|
autoload :Persistence
|
70
74
|
autoload :QualifiedDublinCoreDatastream
|
71
75
|
autoload :Querying
|
76
|
+
autoload :QueryResultBuilder
|
72
77
|
autoload :RDF
|
73
78
|
autoload_under 'rdf' do
|
74
79
|
autoload :RDFDatastream
|
@@ -91,6 +96,7 @@ module ActiveFedora #:nodoc:
|
|
91
96
|
autoload :Serialization
|
92
97
|
autoload :SimpleDatastream
|
93
98
|
autoload :SolrInstanceLoader
|
99
|
+
autoload :SolrQueryBuilder
|
94
100
|
autoload :SolrService
|
95
101
|
autoload :SparqlInsert
|
96
102
|
autoload :Predicates
|
@@ -151,6 +157,7 @@ module ActiveFedora #:nodoc:
|
|
151
157
|
SolrService.reset!
|
152
158
|
Predicates.predicate_config = nil
|
153
159
|
configurator.init(options)
|
160
|
+
fedora.init_base_path
|
154
161
|
end
|
155
162
|
|
156
163
|
def config
|
@@ -224,6 +231,7 @@ module ActiveFedora #:nodoc:
|
|
224
231
|
end
|
225
232
|
end
|
226
233
|
end
|
234
|
+
|
227
235
|
end
|
228
236
|
|
229
237
|
self.configurator ||= ActiveFedora::FileConfigurator.new
|
@@ -22,10 +22,10 @@ module ActiveFedora
|
|
22
22
|
chain.each_with_index do |reflection, i|
|
23
23
|
if reflection.source_macro == :belongs_to
|
24
24
|
# Create a partial solr query using the ids. We may add additional filters such as class_name later
|
25
|
-
scope = scope.where( ActiveFedora::
|
25
|
+
scope = scope.where( ActiveFedora::SolrQueryBuilder.construct_query_for_ids([owner[reflection.foreign_key]]))
|
26
26
|
elsif reflection.source_macro == :has_and_belongs_to_many
|
27
27
|
else
|
28
|
-
scope = scope.where( ActiveFedora::
|
28
|
+
scope = scope.where( ActiveFedora::SolrQueryBuilder.construct_query_for_rel(association.send(:find_reflection) => owner.id))
|
29
29
|
end
|
30
30
|
|
31
31
|
is_first_chain = i == 0
|
@@ -42,8 +42,8 @@ module ActiveFedora
|
|
42
42
|
candidate_classes = klass.descendants.select {|d| d.name }
|
43
43
|
candidate_classes += [klass] unless klass == ActiveFedora::Base
|
44
44
|
model_pairs = candidate_classes.inject([]) { |arr, klass| arr << [:has_model, klass.to_class_uri]; arr }
|
45
|
-
'(' + ActiveFedora::
|
46
|
-
ActiveFedora::
|
45
|
+
'(' + ActiveFedora::SolrQueryBuilder.construct_query_for_ids(ids) + ') AND (' +
|
46
|
+
ActiveFedora::SolrQueryBuilder.construct_query_for_rel(model_pairs, 'OR') + ')'
|
47
47
|
end
|
48
48
|
|
49
49
|
def foreign_key_present?
|
@@ -8,7 +8,6 @@ module ActiveFedora
|
|
8
8
|
construct_query
|
9
9
|
end
|
10
10
|
|
11
|
-
|
12
11
|
# Implements the reader method, e.g. foo.items for Foo.has_many :items
|
13
12
|
# @param opts [Boolean, Hash] if true, force a reload
|
14
13
|
# @option opts [Symbol] :response_format can be ':solr' to return a solr result.
|
@@ -264,7 +263,7 @@ module ActiveFedora
|
|
264
263
|
def find_target
|
265
264
|
# TODO: don't reify, just store the solr results and lazily reify.
|
266
265
|
# For now, we set a hard limit of 1000 results.
|
267
|
-
records = ActiveFedora::
|
266
|
+
records = ActiveFedora::QueryResultBuilder.reify_solr_results(load_from_solr(rows: 1000))
|
268
267
|
records.each { |record| set_inverse_instance(record) }
|
269
268
|
records
|
270
269
|
end
|
@@ -332,37 +331,38 @@ module ActiveFedora
|
|
332
331
|
def construct_query
|
333
332
|
|
334
333
|
#TODO use primary_key instead of id
|
335
|
-
clauses = {
|
334
|
+
clauses = { find_reflection => @owner.id }
|
336
335
|
clauses[:has_model] = @reflection.class_name.constantize.to_class_uri if @reflection.class_name && @reflection.class_name != 'ActiveFedora::Base'
|
337
|
-
@counter_query = @finder_query = ActiveFedora::
|
336
|
+
@counter_query = @finder_query = ActiveFedora::SolrQueryBuilder.construct_query_for_rel(clauses)
|
338
337
|
end
|
339
338
|
|
340
339
|
|
341
340
|
private
|
342
341
|
|
343
|
-
def
|
344
|
-
if @reflection.options[:predicate]
|
345
|
-
|
346
|
-
elsif @reflection.class_name && @reflection.class_name != 'ActiveFedora::Base' && @reflection.macro != :has_and_belongs_to_many
|
342
|
+
def find_reflection
|
343
|
+
return reflection if @reflection.options[:predicate]
|
344
|
+
if @reflection.class_name && @reflection.class_name != 'ActiveFedora::Base' && @reflection.macro != :has_and_belongs_to_many
|
347
345
|
inverse_relation = @owner.class.to_s.underscore.to_sym
|
348
346
|
begin
|
349
|
-
|
347
|
+
find_reflection_for_relation(@reflection.class_name.constantize)
|
350
348
|
rescue NameError
|
351
349
|
raise "No :predicate attribute was set or could be inferred for #{@reflection.macro} #{@reflection.name.inspect} on #{@owner.class}"
|
352
350
|
end
|
351
|
+
else
|
352
|
+
raise "Couldn't find reflection"
|
353
353
|
end
|
354
354
|
end
|
355
355
|
|
356
|
-
def
|
356
|
+
def find_reflection_for_relation(klass, inverse_relation=@owner.class.to_s.underscore.to_sym)
|
357
357
|
raise "Unable to lookup the :predicate attribute for #{@reflection.macro} #{@reflection.name.inspect} on #{@owner.class} because #{klass} specifies \"class_name: 'ActiveFedora::Base'\". Either specify a specific class_name in #{klass} or set :predicate in the #{@reflection.macro} declaration on #{@owner.class}" if inverse_relation == :'active_fedora/base'
|
358
358
|
if klass.reflections.key?(inverse_relation)
|
359
359
|
# Try it singular
|
360
|
-
return klass.reflections[inverse_relation]
|
360
|
+
return klass.reflections[inverse_relation]
|
361
361
|
elsif klass.reflections.key?(inverse_relation.to_s.pluralize.to_sym)
|
362
362
|
# Try it plural
|
363
|
-
return klass.reflections[inverse_relation.to_s.pluralize.to_sym]
|
363
|
+
return klass.reflections[inverse_relation.to_s.pluralize.to_sym]
|
364
364
|
end
|
365
|
-
|
365
|
+
find_reflection_for_relation(klass, @owner.class.superclass.to_s.underscore.to_sym)
|
366
366
|
end
|
367
367
|
|
368
368
|
def create_record(attributes, raise = false)
|
@@ -51,10 +51,10 @@ module ActiveFedora
|
|
51
51
|
return [] if ids.blank?
|
52
52
|
solr_result = []
|
53
53
|
0.step(ids.size,page_size) do |startIdx|
|
54
|
-
query = ActiveFedora::
|
54
|
+
query = ActiveFedora::SolrQueryBuilder.construct_query_for_ids(ids.slice(startIdx,page_size))
|
55
55
|
solr_result += ActiveFedora::SolrService.query(query, rows: page_size)
|
56
56
|
end
|
57
|
-
return ActiveFedora::
|
57
|
+
return ActiveFedora::QueryResultBuilder.reify_solr_results(solr_result)
|
58
58
|
end
|
59
59
|
|
60
60
|
# In a HABTM, just look in the RDF, no need to run a count query from solr.
|
@@ -54,10 +54,10 @@ module ActiveFedora
|
|
54
54
|
def filter_by_class(candidate_uris)
|
55
55
|
return [] if candidate_uris.empty?
|
56
56
|
ids = candidate_uris.map {|uri| ActiveFedora::Base.uri_to_id(uri) }
|
57
|
-
results = ActiveFedora::SolrService.query(ActiveFedora::
|
57
|
+
results = ActiveFedora::SolrService.query(ActiveFedora::SolrQueryBuilder.construct_query_for_ids(ids), rows: 10000)
|
58
58
|
|
59
59
|
docs = results.select do |result|
|
60
|
-
ActiveFedora::
|
60
|
+
ActiveFedora::QueryResultBuilder.classes_from_solr_document(result).any? { |klass|
|
61
61
|
class_ancestors(klass).include? reflection.klass
|
62
62
|
}
|
63
63
|
end
|
@@ -31,7 +31,7 @@ module ActiveFedora
|
|
31
31
|
end
|
32
32
|
|
33
33
|
def self.root_resource_path
|
34
|
-
ActiveFedora.fedora.
|
34
|
+
ActiveFedora.fedora.root_resource_path
|
35
35
|
end
|
36
36
|
|
37
37
|
def self.connection
|
@@ -48,11 +48,7 @@ module ActiveFedora
|
|
48
48
|
end
|
49
49
|
|
50
50
|
def self.reinitialize_repo
|
51
|
-
|
52
|
-
ActiveFedora.fedora.connection.put(root_resource_path, "")
|
53
|
-
rescue Ldp::HttpError => exception
|
54
|
-
log "#reinitialize_repo in spec_helper.rb raised #{exception}"
|
55
|
-
end
|
51
|
+
ActiveFedora.fedora.init_base_path
|
56
52
|
end
|
57
53
|
|
58
54
|
def self.log(message)
|
data/lib/active_fedora/fedora.rb
CHANGED
@@ -15,5 +15,23 @@ module ActiveFedora
|
|
15
15
|
def connection
|
16
16
|
@connection ||= Ldp::Client.new(host)
|
17
17
|
end
|
18
|
+
|
19
|
+
SLASH = '/'.freeze
|
20
|
+
BLANK = ''.freeze
|
21
|
+
|
22
|
+
# Call this to create a Container Resource to act as the base path for this connection
|
23
|
+
def init_base_path
|
24
|
+
connection.get(root_resource_path)
|
25
|
+
ActiveFedora::Base.logger.info "Attempted to init base path `#{root_resource_path}`, but it already exists" if ActiveFedora::Base.logger
|
26
|
+
return false
|
27
|
+
rescue Ldp::NotFound
|
28
|
+
connection.put(root_resource_path, BLANK).success?
|
29
|
+
end
|
30
|
+
|
31
|
+
# Remove a leading slash from the base_path
|
32
|
+
def root_resource_path
|
33
|
+
@root_resource_path ||= base_path.sub(SLASH, BLANK)
|
34
|
+
end
|
35
|
+
|
18
36
|
end
|
19
37
|
end
|
@@ -6,11 +6,11 @@ module ActiveFedora
|
|
6
6
|
include RDF::Indexing
|
7
7
|
include ActiveTriples::Properties
|
8
8
|
include ActiveTriples::Reflection
|
9
|
-
delegate :rdf_subject,
|
9
|
+
delegate :rdf_subject, :get_values, to: :resource
|
10
10
|
|
11
|
-
property :has_model, predicate: ::RDF::
|
12
|
-
property :create_date, predicate: ActiveFedora::RDF::
|
13
|
-
property :modified_date, predicate: ActiveFedora::RDF::
|
11
|
+
property :has_model, predicate: ActiveFedora::RDF::Fcrepo::Model.hasModel
|
12
|
+
property :create_date, predicate: ActiveFedora::RDF::Fcrepo4.created
|
13
|
+
property :modified_date, predicate: ActiveFedora::RDF::Fcrepo4.lastModified
|
14
14
|
|
15
15
|
def create_date
|
16
16
|
super.first
|
data/lib/active_fedora/file.rb
CHANGED
@@ -254,6 +254,9 @@ module ActiveFedora
|
|
254
254
|
payload = behaves_like_io?(content) ? content.read : content
|
255
255
|
headers = { 'Content-Type' => mime_type }
|
256
256
|
headers['Content-Disposition'] = "attachment; filename=\"#{@original_name}\"" if @original_name
|
257
|
+
# Setting the content-length is required until we figure out why Faraday
|
258
|
+
# is not doing this automatically for files uploaded via ActionDispatch.
|
259
|
+
headers['Content-Length'] = payload.size.to_s if uploaded_file?(payload)
|
257
260
|
ldp_source.content = payload
|
258
261
|
if new_record?
|
259
262
|
ldp_source.create do |req|
|
@@ -292,6 +295,10 @@ module ActiveFedora
|
|
292
295
|
|
293
296
|
private
|
294
297
|
|
298
|
+
def uploaded_file?(payload)
|
299
|
+
defined?(ActionDispatch::Http::UploadedFile) and payload.instance_of?(ActionDispatch::Http::UploadedFile)
|
300
|
+
end
|
301
|
+
|
295
302
|
def local_or_remote_content(ensure_fetch = true)
|
296
303
|
return @content if new_record?
|
297
304
|
|
@@ -25,7 +25,7 @@ module ActiveFedora
|
|
25
25
|
|
26
26
|
def get_fixity_response_from_fedora
|
27
27
|
uri = target + "/fcr:fixity"
|
28
|
-
ActiveFedora.fedora.connection.get(uri)
|
28
|
+
ActiveFedora.fedora.connection.get(encoded_url(uri))
|
29
29
|
end
|
30
30
|
|
31
31
|
def fixity_graph
|
@@ -36,5 +36,13 @@ module ActiveFedora
|
|
36
36
|
::RDF::URI("http://fedora.info/definitions/v4/repository#status")
|
37
37
|
end
|
38
38
|
|
39
|
+
def encoded_url uri
|
40
|
+
if uri.match("fcr:versions")
|
41
|
+
uri.gsub(/fcr:versions/,"fcr%3aversions")
|
42
|
+
else
|
43
|
+
uri
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
39
47
|
end
|
40
48
|
end
|
@@ -17,7 +17,7 @@ module ActiveFedora
|
|
17
17
|
end
|
18
18
|
|
19
19
|
def self.profile_solr_name
|
20
|
-
ActiveFedora::
|
20
|
+
@profile_solr_name ||= ActiveFedora::SolrQueryBuilder.solr_name("object_profile", :displayable)
|
21
21
|
end
|
22
22
|
|
23
23
|
|
@@ -26,7 +26,7 @@ module ActiveFedora
|
|
26
26
|
Solrizer.set_field(solr_doc, 'system_create', c_time, :stored_sortable)
|
27
27
|
Solrizer.set_field(solr_doc, 'system_modified', m_time, :stored_sortable)
|
28
28
|
Solrizer.set_field(solr_doc, 'active_fedora_model', object.class.inspect, :stored_sortable)
|
29
|
-
solr_doc.merge!(
|
29
|
+
solr_doc.merge!(QueryResultBuilder::HAS_MODEL_SOLR_FIELD => object.has_model)
|
30
30
|
solr_doc.merge!(SOLR_DOCUMENT_ID.to_sym => object.id)
|
31
31
|
solr_doc.merge!(self.class.profile_solr_name => object.to_json)
|
32
32
|
object.attached_files.each do |name, file|
|
@@ -61,10 +61,5 @@ module ActiveFedora
|
|
61
61
|
end
|
62
62
|
solr_doc
|
63
63
|
end
|
64
|
-
|
65
|
-
def solr_name(*args)
|
66
|
-
ActiveFedora::SolrService.solr_name(*args)
|
67
|
-
end
|
68
|
-
|
69
64
|
end
|
70
65
|
end
|
@@ -34,10 +34,6 @@ module ActiveFedora
|
|
34
34
|
solr_doc.merge super({}).each_with_object({}) { |(key, value), new| new[[prefix,key].join] = value }
|
35
35
|
end
|
36
36
|
|
37
|
-
def generate_solr_symbol(base, data_type)
|
38
|
-
ActiveFedora::SolrService.solr_name([prefix,base].join, type: data_type)
|
39
|
-
end
|
40
|
-
|
41
37
|
# ** Experimental **
|
42
38
|
#@return [Boolean] true if either the key for name exists in solr or if its string value exists
|
43
39
|
#@param [String] name Name of key to look for
|
@@ -152,7 +152,7 @@ module ActiveFedora
|
|
152
152
|
@fields.each do |field_key, field_info|
|
153
153
|
things = send(field_key)
|
154
154
|
if things
|
155
|
-
field_symbol = ActiveFedora::
|
155
|
+
field_symbol = ActiveFedora::SolrQueryBuilder.solr_name(field_key, type: field_info[:type])
|
156
156
|
things.val.each do |val|
|
157
157
|
::Solrizer::Extractor.insert_solr_field_value(solr_doc, field_symbol, val )
|
158
158
|
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
module ActiveFedora
|
2
|
+
module QueryResultBuilder
|
3
|
+
def self.lazy_reify_solr_results(solr_results, opts = {})
|
4
|
+
Enumerator.new do |yielder|
|
5
|
+
solr_results.each do |hit|
|
6
|
+
yielder.yield(reify_solr_result(hit, opts))
|
7
|
+
end
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.reify_solr_results(solr_results, opts = {})
|
12
|
+
solr_results.collect { |hit| reify_solr_result(hit, opts) }
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.reify_solr_result(hit, opts = {})
|
16
|
+
klass = class_from_solr_document(hit)
|
17
|
+
klass.find(hit[SOLR_DOCUMENT_ID], cast: true)
|
18
|
+
end
|
19
|
+
|
20
|
+
#Returns all possible classes for the solr object
|
21
|
+
def self.classes_from_solr_document(hit, opts = {})
|
22
|
+
classes = []
|
23
|
+
|
24
|
+
hit[HAS_MODEL_SOLR_FIELD].each { |value| classes << Model.from_class_uri(value) }
|
25
|
+
|
26
|
+
classes.compact
|
27
|
+
end
|
28
|
+
|
29
|
+
#Returns the best singular class for the solr object
|
30
|
+
def self.class_from_solr_document(hit, opts = {})
|
31
|
+
#Set the default starting point to the class specified, if available.
|
32
|
+
best_model_match = Model.from_class_uri(opts[:class]) unless opts[:class].nil?
|
33
|
+
Array(hit[HAS_MODEL_SOLR_FIELD]).each do |value|
|
34
|
+
|
35
|
+
model_value = Model.from_class_uri(value)
|
36
|
+
|
37
|
+
if model_value
|
38
|
+
|
39
|
+
# Set as the first model in case opts[:class] was nil
|
40
|
+
best_model_match ||= model_value
|
41
|
+
|
42
|
+
# If there is an inheritance structure, use the most specific case.
|
43
|
+
if best_model_match > model_value
|
44
|
+
best_model_match = model_value
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
ActiveFedora::Base.logger.warn "Could not find a model for #{hit["id"]}, defaulting to ActiveFedora::Base" unless best_model_match if ActiveFedora::Base.logger
|
50
|
+
best_model_match || ActiveFedora::Base
|
51
|
+
end
|
52
|
+
|
53
|
+
HAS_MODEL_SOLR_FIELD = SolrQueryBuilder.solr_name("has_model", :symbol).freeze
|
54
|
+
|
55
|
+
end
|
56
|
+
end
|
@@ -9,7 +9,7 @@ module ActiveFedora
|
|
9
9
|
end
|
10
10
|
|
11
11
|
def default_sort_params
|
12
|
-
[ActiveFedora::
|
12
|
+
[ActiveFedora::SolrQueryBuilder.solr_name(:system_create, :stored_sortable, type: :date)+' asc']
|
13
13
|
end
|
14
14
|
|
15
15
|
end
|
data/lib/active_fedora/rdf.rb
CHANGED
@@ -3,11 +3,12 @@ module ActiveFedora
|
|
3
3
|
extend ActiveSupport::Autoload
|
4
4
|
autoload :DatastreamIndexing
|
5
5
|
autoload :Fcrepo
|
6
|
+
autoload :Fcrepo4
|
6
7
|
autoload :Ldp
|
7
8
|
autoload :Indexing
|
8
9
|
autoload :Identifiable
|
9
|
-
autoload :ObjectResource
|
10
10
|
autoload :Persistence
|
11
11
|
autoload :RelsExt
|
12
|
+
autoload :ProjectHydra
|
12
13
|
end
|
13
14
|
end
|
@@ -1,12 +1,326 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
# This file generated automatically using vocab-fetch from github.com:fcrepo3/fcrepo/master/fcrepo-server/src/main/resources/rdfs/fedora_relsext_ontology.rdfs
|
3
|
+
# and edited for clarity and additional terms published in different serializations of the voabularies
|
1
4
|
require 'rdf'
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
5
|
+
module ActiveFedora::RDF
|
6
|
+
module Fcrepo
|
7
|
+
class System < ::RDF::StrictVocabulary("info:fedora/fedora-system:")
|
8
|
+
term :"ContentModel-3.0",
|
9
|
+
comment: %(Base Fedora 3 CModel cModel).freeze,
|
10
|
+
label: "Fedora 3 Content Model".freeze,
|
11
|
+
subClassOf: "info:fedora/fedora-system:def/model#FedoraObject".freeze,
|
12
|
+
type: "info:fedora/fedora-system:def/model#FedoraObject".freeze
|
13
|
+
term :"FedoraObject-3.0",
|
14
|
+
comment: %(Base Fedora 3 Object cModel).freeze,
|
15
|
+
label: "Fedora 3 Object".freeze,
|
16
|
+
subClassOf: "info:fedora/fedora-system:def/model#FedoraObject".freeze,
|
17
|
+
type: "info:fedora/fedora-system:def/model#FedoraObject".freeze
|
18
|
+
term :"ServiceDefinition-3.0",
|
19
|
+
comment: %(Fedora 3 Service Definition/BDef cModel).freeze,
|
20
|
+
label: "Fedora 3 Service Definition".freeze,
|
21
|
+
subClassOf: "info:fedora/fedora-system:def/model#FedoraObject".freeze,
|
22
|
+
type: "info:fedora/fedora-system:def/model#FedoraObject".freeze
|
23
|
+
term :"ServiceDeployment-3.0",
|
24
|
+
comment: %(Fedora 3 Service Deployment/BMech cModel).freeze,
|
25
|
+
label: "Fedora 3 Service Deployment".freeze,
|
26
|
+
subClassOf: "info:fedora/fedora-system:def/model#FedoraObject".freeze,
|
27
|
+
type: "info:fedora/fedora-system:def/model#FedoraObject".freeze
|
28
|
+
end
|
29
|
+
class Model < ::RDF::StrictVocabulary("info:fedora/fedora-system:def/model#")
|
30
|
+
# Class definitions
|
31
|
+
term :FedoraObject,
|
32
|
+
comment: %(The base type of all objects in Fedora).freeze,
|
33
|
+
label: "FedoraObject".freeze,
|
34
|
+
subClassOf: "rdfs:Resource".freeze,
|
35
|
+
type: "rdfs:Class".freeze
|
36
|
+
term :Datastream,
|
37
|
+
comment: %(Binary data associated with a Fedora object).freeze,
|
38
|
+
label: "Datastream".freeze,
|
39
|
+
subClassOf: "rdfs:Resource".freeze,
|
40
|
+
type: "rdfs:Class".freeze
|
41
|
+
term :ExtProperty,
|
42
|
+
comment: %(Reification of an extension property of a Fedora object used in messaging).freeze,
|
43
|
+
label: "ExtProperty".freeze,
|
44
|
+
subClassOf: "rdf:Property".freeze,
|
45
|
+
type: "rdfs:Class".freeze
|
46
|
+
term :State,
|
47
|
+
comment: %(The state of a Fedora object or datastream).freeze,
|
48
|
+
label: "State".freeze,
|
49
|
+
subClassOf: "rdfs:Resource".freeze,
|
50
|
+
type: "rdfs:Class".freeze
|
51
|
+
term :Active,
|
52
|
+
comment: %(State of an object available in the repository).freeze,
|
53
|
+
label: "Active".freeze,
|
54
|
+
subClassOf: "rdfs:Resource".freeze,
|
55
|
+
type: "info:fedora/fedora-system:def/model#State".freeze
|
56
|
+
term :Deleted,
|
57
|
+
comment: %(State of an object that should be considered deleted, but is not purged).freeze,
|
58
|
+
label: "Deleted".freeze,
|
59
|
+
subClassOf: "rdfs:Resource".freeze,
|
60
|
+
type: "info:fedora/fedora-system:def/model#State".freeze
|
61
|
+
term :Inactive,
|
62
|
+
comment: %(State of an object that should be considered temporarily unavailable).freeze,
|
63
|
+
label: "Inactive".freeze,
|
64
|
+
subClassOf: "rdfs:Resource".freeze,
|
65
|
+
type: "info:fedora/fedora-system:def/model#State".freeze
|
66
|
+
# Property definitions
|
67
|
+
property :altIds,
|
68
|
+
comment: %(The alternate IDs for a datastream).freeze,
|
69
|
+
label: "Alternate IDs".freeze,
|
70
|
+
domain: "info:fedora/fedora-system:def/model#Datastream",
|
71
|
+
range: "xsd:string".freeze,
|
72
|
+
type: "rdf:Property".freeze
|
73
|
+
property :controlGroup,
|
74
|
+
comment: %(indicates whether a Datastream's content is inline XML (X), Managed (M), Referenced (R) or External (E)).freeze,
|
75
|
+
label: "controlGroup".freeze,
|
76
|
+
domain: "info:fedora/fedora-system:def/model#Datastream",
|
77
|
+
range: "xsd:string".freeze,
|
78
|
+
type: "rdf:Property".freeze
|
79
|
+
property :createdDate,
|
80
|
+
comment: %(The UTC datetime an object was created).freeze,
|
81
|
+
label: "createdDate".freeze,
|
82
|
+
domain: "info:fedora/fedora-system:def/model#FedoraObject",
|
83
|
+
range: "xsd:dateTimeStamp".freeze,
|
84
|
+
type: "rdf:Property".freeze
|
85
|
+
property :definesMethod,
|
86
|
+
comment: %(indicates the name of a service method defined in this interface).freeze,
|
87
|
+
label: "definesMethod".freeze,
|
88
|
+
domain: "info:fedora/fedora-system:ServiceDefinition-3.0".freeze,
|
89
|
+
range: "xsd:NCName".freeze,
|
90
|
+
type: "rdf:Property".freeze
|
91
|
+
property :digest,
|
92
|
+
comment: %(indicates the checksum digest of a datastream's contents or the keyword 'none').freeze,
|
93
|
+
label: "digest".freeze,
|
94
|
+
domain: "info:fedora/fedora-system:def/model#Datastream",
|
95
|
+
range: "xsd:string".freeze,
|
96
|
+
type: "rdf:Property".freeze
|
97
|
+
property :digestType,
|
98
|
+
comment: %(indicates either the checksum algorithm or the keyword DISABLED).freeze,
|
99
|
+
label: "digestType".freeze,
|
100
|
+
domain: "info:fedora/fedora-system:def/model#Datastream",
|
101
|
+
range: "xsd:string".freeze,
|
102
|
+
type: "rdf:Property".freeze
|
103
|
+
property :downloadFilename,
|
104
|
+
comment: %(indicates the name to be used when downloading a datastream's contents).freeze,
|
105
|
+
label: "downloadFilename".freeze,
|
106
|
+
domain: "info:fedora/fedora-system:def/model#Datastream",
|
107
|
+
range: "xsd:string".freeze,
|
108
|
+
type: "rdf:Property".freeze
|
109
|
+
property :extProperty,
|
110
|
+
comment: %(indicates an extension property of an object in Fedora in messaging).freeze,
|
111
|
+
label: "extProperty".freeze,
|
112
|
+
domain: "info:fedora/fedora-system:def/model#FedoraObject".freeze,
|
113
|
+
range: "info:fedora/fedora-system:def/model#ExtProperty".freeze,
|
114
|
+
type: "rdf:Property".freeze
|
115
|
+
property :formatURI,
|
116
|
+
comment: %(A URI indicating the format of a datastream's content).freeze,
|
117
|
+
label: "formatURI".freeze,
|
118
|
+
type: "rdf:Property".freeze
|
119
|
+
property :hasModel,
|
120
|
+
comment: %(Indicates the Fedora 3 CModels for this object).freeze,
|
121
|
+
label: "hasModel".freeze,
|
122
|
+
subPropertyOf: "rdf:type".freeze,
|
123
|
+
domain: "info:fedora/fedora-system:FedoraObject-3.0".freeze,
|
124
|
+
range: "info:fedora/fedora-system:ContentModel-3.0".freeze,
|
125
|
+
type: "rdf:Property".freeze
|
126
|
+
property :hasService,
|
127
|
+
comment: %(indicates the Fedora 3 Service Definitions applicable to this CModel).freeze,
|
128
|
+
label: "hasService".freeze,
|
129
|
+
domain: "info:fedora/fedora-system:ContentModel-3.0".freeze,
|
130
|
+
range: "info:fedora/fedora-system:ServiceDefinition-3.0".freeze,
|
131
|
+
type: "rdf:Property".freeze
|
132
|
+
property :isContractorOf,
|
133
|
+
comment: %(indicates the Fedora 3 Content Models this deployment applies to).freeze,
|
134
|
+
label: "".freeze,
|
135
|
+
domain: "info:fedora/fedora-system:ServiceDeployment-3.0".freeze,
|
136
|
+
range: "info:fedora/fedora-system:ContentModel-3.0".freeze,
|
137
|
+
type: "rdf:Property".freeze
|
138
|
+
property :isDeploymentOf,
|
139
|
+
comment: %(indicates the Fedora 3 Service Definitions this deployment implements).freeze,
|
140
|
+
label: "isDeploymentOf".freeze,
|
141
|
+
domain: "info:fedora/fedora-system:ServiceDeployment-3.0".freeze,
|
142
|
+
range: "info:fedora/fedora-system:ServiceDefinition-3.0".freeze,
|
143
|
+
type: "rdf:Property".freeze
|
144
|
+
property :label,
|
145
|
+
comment: %(The label applied to a Fedora object).freeze,
|
146
|
+
label: "label".freeze,
|
147
|
+
domain: "info:fedora/fedora-system:def/model#FedoraObject".freeze,
|
148
|
+
range: "xsd:string".freeze,
|
149
|
+
type: "rdf:Property".freeze
|
150
|
+
property :length,
|
151
|
+
comment: %(indicates the length of a datastream's contents).freeze,
|
152
|
+
label: "length".freeze,
|
153
|
+
domain: "info:fedora/fedora-system:def/model#Datastream".freeze,
|
154
|
+
range: "xsd:nonNegativeInteger".freeze,
|
155
|
+
type: "rdf:Property".freeze
|
156
|
+
property :ownerId,
|
157
|
+
comment: %(indicates the owner of an object).freeze,
|
158
|
+
label: "ownerId".freeze,
|
159
|
+
type: "rdf:Property".freeze
|
160
|
+
property :state,
|
161
|
+
comment: %(indicates the state of the object or datastream).freeze,
|
162
|
+
label: "state".freeze,
|
163
|
+
domain: ["info:fedora/fedora-system:def/model#FedoraObject".freeze,"info:fedora/fedora-system:def/model#Datastream".freeze],
|
164
|
+
range: "info:fedora/fedora-system:def/model#State".freeze,
|
165
|
+
type: "rdf:Property".freeze
|
166
|
+
property :versionable,
|
167
|
+
comment: %(indicates whether a datastream's property and contents changes are being tracked as versions).freeze,
|
168
|
+
label: "versionable".freeze,
|
169
|
+
domain: "info:fedora/fedora-system:def/model#Datastream".freeze,
|
170
|
+
range: "xsd:boolean".freeze,
|
171
|
+
type: "rdf:Property".freeze
|
172
|
+
end
|
173
|
+
class RelsExt < ::RDF::StrictVocabulary("info:fedora/fedora-system:def/relations-external#")
|
11
174
|
|
175
|
+
# Property definitions
|
176
|
+
property :fedoraRelationship,
|
177
|
+
comment: %(The primitive property for all object-to-object relationships in the fedora ontology).freeze,
|
178
|
+
label: "Fedora Relationship".freeze,
|
179
|
+
type: "rdf:Property".freeze
|
180
|
+
property :hasAnnotation,
|
181
|
+
comment: %(A refinement of the generic descriptive relationship indicating a commentary relationship between fedora objects. The subject is a fedora object that is being commented on and the predicate is a fedora object that represents an annotation or comment about the subject. ).freeze,
|
182
|
+
label: "Has Annotation".freeze,
|
183
|
+
subPropertyOf: "info:fedora/fedora-system:def/relations-external#hasDescription".freeze,
|
184
|
+
"owl:inverseOf" => %(info:fedora/fedora-system:def/relations-external#isAnnotationOf).freeze,
|
185
|
+
type: "rdf:Property".freeze
|
186
|
+
property :hasCollectionMember,
|
187
|
+
label: "Has Collection Member".freeze,
|
188
|
+
subPropertyOf: "info:fedora/fedora-system:def/relations-external#hasMember".freeze,
|
189
|
+
"owl:inverseOf" => %(info:fedora/fedora-system:def/relations-external#isMemberOfCollection).freeze,
|
190
|
+
type: "rdf:Property".freeze
|
191
|
+
property :hasConstituent,
|
192
|
+
label: "Has Constituent".freeze,
|
193
|
+
subPropertyOf: "info:fedora/fedora-system:def/relations-external#hasPart".freeze,
|
194
|
+
"owl:inverseOf" => %(info:fedora/fedora-system:def/relations-external#isConstituentOf).freeze,
|
195
|
+
type: "rdf:Property".freeze
|
196
|
+
property :hasDependent,
|
197
|
+
label: "Has Dependent".freeze,
|
198
|
+
subPropertyOf: "info:fedora/fedora-system:def/relations-external#fedoraRelationship".freeze,
|
199
|
+
"owl:inverseOf" => %(info:fedora/fedora-system:def/relations-external#isDependentOf).freeze,
|
200
|
+
type: "rdf:Property".freeze
|
201
|
+
property :hasDerivation,
|
202
|
+
label: "Has Derivation".freeze,
|
203
|
+
subPropertyOf: "info:fedora/fedora-system:def/relations-external#fedoraRelationship".freeze,
|
204
|
+
"owl:inverseOf" => %(info:fedora/fedora-system:def/relations-external#isDerivationOf).freeze,
|
205
|
+
type: "rdf:Property".freeze
|
206
|
+
property :hasDescription,
|
207
|
+
comment: %(A generic descriptive relationship between fedora objects. The subject is a fedora object that is being described in some manner and the predicate is a fedora object that represents a descriptive entity that is about the subject. ).freeze,
|
208
|
+
label: "Has Description".freeze,
|
209
|
+
subPropertyOf: "info:fedora/fedora-system:def/relations-external#fedoraRelationship".freeze,
|
210
|
+
"owl:inverseOf" => %(info:fedora/fedora-system:def/relations-external#isDescriptionOf).freeze,
|
211
|
+
type: "rdf:Property".freeze
|
212
|
+
property :hasEquivalent,
|
213
|
+
label: "Has Equivalent".freeze,
|
214
|
+
subPropertyOf: "info:fedora/fedora-system:def/relations-external#fedoraRelationship".freeze,
|
215
|
+
type: "rdf:Property".freeze
|
216
|
+
property :hasMember,
|
217
|
+
label: "Has Member".freeze,
|
218
|
+
subPropertyOf: "info:fedora/fedora-system:def/relations-external#hasPart/".freeze,
|
219
|
+
"owl:inverseOf" => %(info:fedora/fedora-system:def/relations-external#isMemberOf).freeze,
|
220
|
+
type: "rdf:Property".freeze
|
221
|
+
property :hasMetadata,
|
222
|
+
comment: %(A refinement of the generic descriptive relationship indicating a metadata relationship between fedora objects. The subject is a fedora object and the predicate is a fedora object that represents metadata about the subject. ).freeze,
|
223
|
+
label: "Has Metadata".freeze,
|
224
|
+
subPropertyOf: "info:fedora/fedora-system:def/relations-external#hasDescription".freeze,
|
225
|
+
"owl:inverseOf" => %(info:fedora/fedora-system:def/relations-external#isMetadataFor).freeze,
|
226
|
+
type: "rdf:Property".freeze
|
227
|
+
property :hasPart,
|
228
|
+
label: "Has Part".freeze,
|
229
|
+
subPropertyOf: "info:fedora/fedora-system:def/relations-external#fedoraRelationship".freeze,
|
230
|
+
"owl:inverseOf" => %(info:fedora/fedora-system:def/relations-external#isPartOf).freeze,
|
231
|
+
type: "rdf:Property".freeze
|
232
|
+
property :hasSubset,
|
233
|
+
label: "Has Subset".freeze,
|
234
|
+
subPropertyOf: "info:fedora/fedora-system:def/relations-external#hasMember".freeze,
|
235
|
+
"owl:inverseOf" => %(info:fedora/fedora-system:def/relations-external#isSubsetOf).freeze,
|
236
|
+
type: "rdf:Property".freeze
|
237
|
+
property :isAnnotationOf,
|
238
|
+
comment: %(A refinement of the generic descriptive relationship indicating a commentary relationship between fedora objects. The subject is a fedora object that represents an annotation or comment and the predicate is a fedora object that is being commented upon by the subject.).freeze,
|
239
|
+
label: "Is Annotation Of".freeze,
|
240
|
+
subPropertyOf: "info:fedora/fedora-system:def/relations-external#isDescriptionOf".freeze,
|
241
|
+
"owl:inverseOf" => %(info:fedora/fedora-system:def/relations-external#hasAnnotation).freeze,
|
242
|
+
type: "rdf:Property".freeze
|
243
|
+
property :isConstituentOf,
|
244
|
+
label: "Is Constituent Of".freeze,
|
245
|
+
subPropertyOf: "info:fedora/fedora-system:def/relations-external#isPartOf".freeze,
|
246
|
+
"owl:inverseOf" => %(info:fedora/fedora-system:def/relations-external#hasConstituent).freeze,
|
247
|
+
type: "rdf:Property".freeze
|
248
|
+
property :isDependentOf,
|
249
|
+
label: "Is Dependent Of".freeze,
|
250
|
+
subPropertyOf: "info:fedora/fedora-system:def/relations-external#fedoraRelationship".freeze,
|
251
|
+
"owl:inverseOf" => %(info:fedora/fedora-system:def/relations-external#hasDependent).freeze,
|
252
|
+
type: "rdf:Property".freeze
|
253
|
+
property :isDerivationOf,
|
254
|
+
label: "Is Derivation Of".freeze,
|
255
|
+
subPropertyOf: "info:fedora/fedora-system:def/relations-external#fedoraRelationship".freeze,
|
256
|
+
"owl:inverseOf" => %(info:fedora/fedora-system:def/relations-external#hasDerivation).freeze,
|
257
|
+
type: "rdf:Property".freeze
|
258
|
+
property :isDescriptionOf,
|
259
|
+
comment: %(A generic descriptive relationship between fedora objects. The subject is a fedora object that represents a descriptive entity and the predicate is a fedora object that is being described in some manner by the subject.).freeze,
|
260
|
+
label: "Is Description Of".freeze,
|
261
|
+
subPropertyOf: "info:fedora/fedora-system:def/relations-external#fedoraRelationship".freeze,
|
262
|
+
"owl:inverseOf" => %(info:fedora/fedora-system:def/relations-external#hasDescription).freeze,
|
263
|
+
type: "rdf:Property".freeze
|
264
|
+
property :isMemberOf,
|
265
|
+
label: "Is Member Of".freeze,
|
266
|
+
subPropertyOf: "info:fedora/fedora-system:def/relations-external#isPartOf".freeze,
|
267
|
+
"owl:inverseOf" => %(info:fedora/fedora-system:def/relations-external#hasMember).freeze,
|
268
|
+
type: "rdf:Property".freeze
|
269
|
+
property :isMemberOfCollection,
|
270
|
+
label: "Is Member Of Collection".freeze,
|
271
|
+
subPropertyOf: "info:fedora/fedora-system:def/relations-external#isMemberOf".freeze,
|
272
|
+
"owl:inverseOf" => %(info:fedora/fedora-system:def/relations-external#hasCollectionMember).freeze,
|
273
|
+
type: "rdf:Property".freeze
|
274
|
+
property :isMetadataFor,
|
275
|
+
comment: %(A refinement of the generic descriptive relationship indicating a metadata relationship between fedora objects. The subject is a fedora object that represents metadata and the predicate is a fedora object for which the subject serves as metadata.).freeze,
|
276
|
+
label: "Is Metadata For".freeze,
|
277
|
+
subPropertyOf: "info:fedora/fedora-system:def/relations-external#isDescriptionOf".freeze,
|
278
|
+
"owl:inverseOf" => %(info:fedora/fedora-system:def/relations-external#hasMetadata).freeze,
|
279
|
+
type: "rdf:Property".freeze
|
280
|
+
property :isPartOf,
|
281
|
+
label: "Is Part Of".freeze,
|
282
|
+
subPropertyOf: "info:fedora/fedora-system:def/relations-external#fedoraRelationship".freeze,
|
283
|
+
"owl:inverseOf" => %(info:fedora/fedora-system:def/relations-external#hasPart).freeze,
|
284
|
+
type: "rdf:Property".freeze
|
285
|
+
property :isSubsetOf,
|
286
|
+
label: "Is Subset Of".freeze,
|
287
|
+
subPropertyOf: "info:fedora/fedora-system:def/relations-external#isMemberOf".freeze,
|
288
|
+
"owl:inverseOf" => %(info:fedora/fedora-system:def/relations-external#hasSubset).freeze,
|
289
|
+
type: "rdf:Property".freeze
|
290
|
+
end
|
291
|
+
class View < ::RDF::StrictVocabulary("info:fedora/fedora-system:def/view#")
|
292
|
+
property :disseminates,
|
293
|
+
comment: %(A property used to indicate that an object contains a datastream).freeze,
|
294
|
+
label: "disseminates".freeze,
|
295
|
+
domain: "info:fedora/fedora-system:FedoraObject-3.0".freeze,
|
296
|
+
range: "info:fedora/fedora-system:def/model#Datastream".freeze,
|
297
|
+
type: "rdf:Property".freeze
|
298
|
+
property :disseminationType,
|
299
|
+
comment: %(A property whose object is common to all Datastreams of a given DSID).freeze,
|
300
|
+
label: "dissemination type".freeze,
|
301
|
+
type: "rdf:Property".freeze
|
302
|
+
property :isVolatile,
|
303
|
+
comment: %(A property indicating that a datastream's content is a reference to content external to the repository).freeze,
|
304
|
+
label: "isVolatile".freeze,
|
305
|
+
domain: "info:fedora/fedora-system:def/model#Datastream".freeze,
|
306
|
+
range: "xsd:boolean".freeze,
|
307
|
+
type: "rdf:Property".freeze
|
308
|
+
property :lastModifiedDate,
|
309
|
+
comment: %(UTC datetime of the last change to an object or most recent version of this datastream).freeze,
|
310
|
+
label: "lastModifiedDate".freeze,
|
311
|
+
domain: ["info:fedora/fedora-system:def/model#FedoraObject".freeze,"info:fedora/fedora-system:def/model#Datastream".freeze],
|
312
|
+
range: "xsd:dateTimeStamp".freeze,
|
313
|
+
type: "rdf:Property".freeze
|
314
|
+
property :mimeType,
|
315
|
+
comment: %(The MIME type of this datastream's content).freeze,
|
316
|
+
label: "mimeType".freeze,
|
317
|
+
domain: "info:fedora/fedora-system:def/model#Datastream".freeze,
|
318
|
+
range: "xsd:string".freeze,
|
319
|
+
type: "rdf:Property".freeze
|
320
|
+
property :version,
|
321
|
+
comment: %(indicates Fedora server version in messaging).freeze,
|
322
|
+
label: "Server version".freeze,
|
323
|
+
type: "rdf:Property".freeze
|
324
|
+
end
|
325
|
+
end
|
12
326
|
end
|