Class: TaliaCore::RdfResource
- Includes:
- ActiveRDF::ResourceLike
- Defined in:
- lib/talia_core/rdf_resource.rb
Overview
This class encapsulates all functionality to access a specific resource in the RDF store. It is analogous to the RDFS::Resource class in ActiveRDF.
However, it’s specifically tailored for the use with Talia, and avoids some of the pitfalls of the original class.
Instance Attribute Summary collapse
Class Method Summary collapse
-
.default_types ⇒ Object
A list of “default” types that will be added to all resources.
Instance Method Summary collapse
-
#[](predicate) ⇒ Object
Returns the value(s) of the given predicates as a PropertyList filled with the defined object_class objects.
-
#clear_rdf ⇒ Object
Clears all rdf for this resource.
-
#direct_predicates ⇒ Object
Returns the predicates that are directly defined for this resource.
-
#direct_write_predicate(predicate, value) ⇒ Object
Direct writing of a predicate, with having to fetch a list first.
-
#initialize(uri) ⇒ RdfResource
constructor
Initialize a new resource with the given URI.
-
#inverse ⇒ Object
Returns an on-the-fly object that can be used to query for “inverse” properties of this resource (meaning triples that have the current resource as an object.) .
-
#inverse_predicates ⇒ Object
Returns the “inverse” predicates for the resource.
-
#remove(predicate, value = nil) ⇒ Object
Removes the given predicate (restrict to the triple with the given value if a value is given).
-
#save ⇒ Object
Saves the current resource and it’s properties to the RDF.
-
#types ⇒ Object
Returns the types of this resource as N::SourceClass objects.
-
#uri ⇒ Object
Returns the uri of this resource as a string.
Constructor Details
#initialize(uri) ⇒ RdfResource
Initialize a new resource with the given URI
31 32 33 34 |
# File 'lib/talia_core/rdf_resource.rb', line 31 def initialize(uri) raise ArgumentError, "No blank URI allowed here" if(uri.to_s.blank?) @uri = N::URI.new(uri) end |
Instance Attribute Details
Class Method Details
.default_types ⇒ Object
A list of “default” types that will be added to all resources
15 16 17 18 19 |
# File 'lib/talia_core/rdf_resource.rb', line 15 def default_types @default_types ||= [ N::SourceClass.new(N::RDFS.Resource) ] end |
Instance Method Details
#[](predicate) ⇒ Object
Returns the value(s) of the given predicates as a PropertyList filled with the defined object_class objects.
54 55 56 57 58 59 60 |
# File 'lib/talia_core/rdf_resource.rb', line 54 def [](predicate) predicate = N::URI.new(predicate) unless(predicate.kind_of?(N::URI)) property_list = ActiveRDF::Query.new(object_class).distinct(:o).where(self, predicate, :o).execute PropertyList.new(predicate, property_list, self, source_exists?) end |
#clear_rdf ⇒ Object
Clears all rdf for this resource. FIXME: Not context-aware.
42 43 44 |
# File 'lib/talia_core/rdf_resource.rb', line 42 def clear_rdf ActiveRDF::FederationManager.delete_all(self) end |
#direct_predicates ⇒ Object
Returns the predicates that are directly defined for this resource
96 97 98 |
# File 'lib/talia_core/rdf_resource.rb', line 96 def direct_predicates ActiveRDF::Query.new(N::Predicate).distinct(:p).where(self, :p, :o).execute end |
#direct_write_predicate(predicate, value) ⇒ Object
Direct writing of a predicate, with having to fetch a list first
37 38 39 |
# File 'lib/talia_core/rdf_resource.rb', line 37 def direct_write_predicate(predicate, value) ActiveRDF::FederationManager.add(self, predicate, value) end |
#inverse ⇒ Object
Returns an on-the-fly object that can be used to query for “inverse” properties of this resource (meaning triples that have the current resource as an object.)
The returned object will respond to a [] (array accessor) call which allows the user to specify the predicate to use.
Example: resource.inverse[N::DNCS::title]
The [] method will return a list of objects that are instances of object_class
72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 |
# File 'lib/talia_core/rdf_resource.rb', line 72 def inverse inverseobj = Object.new inverseobj.instance_variable_set(:@obj_uri, self) inverseobj.instance_variable_set(:@obj_class, object_class) class << inverseobj def [](property) property = N::URI.new(property) unless(property.kind_of?(N::URI)) ActiveRDF::Query.new(@obj_class).distinct(:s).where(:s, property, @obj_uri).execute end private(:type) end return inverseobj end |
#inverse_predicates ⇒ Object
Returns the “inverse” predicates for the resource. these are the predicates for which this resource exists as an object
102 103 104 105 106 |
# File 'lib/talia_core/rdf_resource.rb', line 102 def inverse_predicates qry = ActiveRDF::Query.new.distinct.select(:p) qry.where(:s, :p, N::URI.new(uri.to_s)) qry.execute.collect{ |res| N::Predicate.new(res.uri) } end |
#remove(predicate, value = nil) ⇒ Object
Removes the given predicate (restrict to the triple with the given value if a value is given).
48 49 50 |
# File 'lib/talia_core/rdf_resource.rb', line 48 def remove(predicate, value = nil) ActiveRDF::FederationManager.delete(self, predicate, value) end |
#save ⇒ Object
Saves the current resource and it’s properties to the RDF. (This has been optimized so that if only one RDF backend is present it won’t do any copying around.
111 112 113 114 115 116 117 118 |
# File 'lib/talia_core/rdf_resource.rb', line 111 def save if((ActiveRDF::ConnectionPool.read_adapters.size == 1) && (ActiveRDF::ConnectionPool.write_adapter == ActiveRDF::ConnectionPool.read_adapters.first)) save_default_types # Only write the "default" types to the store else full_save # Do the full save operation end end |
#types ⇒ Object
Returns the types of this resource as N::SourceClass objects
121 122 123 124 125 126 127 128 129 130 |
# File 'lib/talia_core/rdf_resource.rb', line 121 def types types = ActiveRDF::Query.new(N::SourceClass).distinct(:t).where(self,N::RDF::type,:t).execute # Add the "default" types if necessary self.class.default_types.each do |def_type| types << def_type unless(types.include?(def_type)) end # Make a property list for the types. PropertyList.new(N::RDF::type, types, self, source_exists?) end |
#uri ⇒ Object
Returns the uri of this resource as a string
91 92 93 |
# File 'lib/talia_core/rdf_resource.rb', line 91 def uri @uri.to_s end |