talia_core 0.5.0 → 0.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -7,7 +7,7 @@ module TaliaCore
7
7
  # of the pitfalls of the original class.
8
8
  class RdfResource
9
9
 
10
- include RDFS::ResourceLike
10
+ include ActiveRDF::ResourceLike
11
11
 
12
12
  class << self
13
13
 
@@ -34,18 +34,18 @@ module TaliaCore
34
34
 
35
35
  # Direct writing of a predicate, with having to fetch a list first
36
36
  def direct_write_predicate(predicate, value)
37
- FederationManager.add(self, predicate, value)
37
+ ActiveRDF::FederationManager.add(self, predicate, value)
38
38
  end
39
39
 
40
40
  # Clears all rdf for this resource. FIXME: Not context-aware.
41
41
  def clear_rdf
42
- FederationManager.delete_all(self)
42
+ ActiveRDF::FederationManager.delete_all(self)
43
43
  end
44
44
 
45
45
  # Removes the given predicate (restrict to the triple with the
46
46
  # given value if a value is given).
47
47
  def remove(predicate, value = nil)
48
- FederationManager.delete(self, predicate, value)
48
+ ActiveRDF::FederationManager.delete(self, predicate, value)
49
49
  end
50
50
 
51
51
  # Returns the value(s) of the given predicates as a PropertyList filled
@@ -53,7 +53,7 @@ module TaliaCore
53
53
  def [](predicate)
54
54
  predicate = N::URI.new(predicate) unless(predicate.kind_of?(N::URI))
55
55
 
56
- property_list = Query.new(object_class).distinct(:o).where(self, predicate, :o).execute
56
+ property_list = ActiveRDF::Query.new(object_class).distinct(:o).where(self, predicate, :o).execute
57
57
 
58
58
  PropertyList.new(predicate, property_list, self, source_exists?)
59
59
  end
@@ -77,7 +77,7 @@ module TaliaCore
77
77
 
78
78
  def [](property)
79
79
  property = N::URI.new(property) unless(property.kind_of?(N::URI))
80
- Query.new(@obj_class).distinct(:s).where(:s, property, @obj_uri).execute
80
+ ActiveRDF::Query.new(@obj_class).distinct(:s).where(:s, property, @obj_uri).execute
81
81
  end
82
82
  private(:type)
83
83
  end
@@ -93,13 +93,13 @@ module TaliaCore
93
93
 
94
94
  # Returns the predicates that are directly defined for this resource
95
95
  def direct_predicates
96
- Query.new(N::Predicate).distinct(:p).where(self, :p, :o).execute
96
+ ActiveRDF::Query.new(N::Predicate).distinct(:p).where(self, :p, :o).execute
97
97
  end
98
98
 
99
99
  # Returns the "inverse" predicates for the resource. these are the predicates
100
100
  # for which this resource exists as an object
101
101
  def inverse_predicates
102
- qry = Query.new.distinct.select(:p)
102
+ qry = ActiveRDF::Query.new.distinct.select(:p)
103
103
  qry.where(:s, :p, N::URI.new(uri.to_s))
104
104
  qry.execute.collect{ |res| N::Predicate.new(res.uri) }
105
105
  end
@@ -108,8 +108,8 @@ module TaliaCore
108
108
  # been optimized so that if only one RDF backend is present it won't do
109
109
  # any copying around.
110
110
  def save
111
- if((ConnectionPool.read_adapters.size == 1) &&
112
- (ConnectionPool.write_adapter == ConnectionPool.read_adapters.first))
111
+ if((ActiveRDF::ConnectionPool.read_adapters.size == 1) &&
112
+ (ActiveRDF::ConnectionPool.write_adapter == ActiveRDF::ConnectionPool.read_adapters.first))
113
113
  save_default_types # Only write the "default" types to the store
114
114
  else
115
115
  full_save # Do the full save operation
@@ -118,7 +118,7 @@ module TaliaCore
118
118
 
119
119
  # Returns the types of this resource as N::SourceClass objects
120
120
  def types
121
- types = Query.new(N::SourceClass).distinct(:t).where(self,N::RDF::type,:t).execute
121
+ types = ActiveRDF::Query.new(N::SourceClass).distinct(:t).where(self,N::RDF::type,:t).execute
122
122
  # Add the "default" types if necessary
123
123
  self.class.default_types.each do |def_type|
124
124
  types << def_type unless(types.include?(def_type))
@@ -133,7 +133,7 @@ module TaliaCore
133
133
  # Saves the the "default" types of this resource to the writing adapter
134
134
  def save_default_types
135
135
  self.class.default_types.each do |t|
136
- FederationManager.add(self, N::RDF::type, t)
136
+ ActiveRDF::FederationManager.add(self, N::RDF::type, t)
137
137
  end
138
138
  end
139
139
 
@@ -141,11 +141,11 @@ module TaliaCore
141
141
  # the writing adapter. This operation can be very slow.
142
142
  def full_save
143
143
  types.each do |t|
144
- FederationManager.add(self, N::RDF::type, t)
144
+ ActiveRDF::FederationManager.add(self, N::RDF::type, t)
145
145
  end
146
146
 
147
- Query.new(N::URI).distinct(:p,:o).where(self, :p, :o).execute do |p, o|
148
- FederationManager.add(self, p, o)
147
+ ActiveRDF::Query.new(N::URI).distinct(:p,:o).where(self, :p, :o).execute do |p, o|
148
+ ActiveRDF::FederationManager.add(self, p, o)
149
149
  end
150
150
  end
151
151
 
@@ -141,7 +141,7 @@ namespace :talia_core do
141
141
 
142
142
  rdf_cfg[:new] = "yes"
143
143
 
144
- ConnectionPool.add_data_source(rdf_cfg)
144
+ ActiveRDF::ConnectionPool.add_data_source(rdf_cfg)
145
145
  end
146
146
 
147
147
  # Help info
@@ -36,15 +36,15 @@ module TaliaUtil
36
36
  # number of blank nodes
37
37
  def rdfs_from_owl
38
38
  # Remove previous auto rdfs triples
39
- FederationManager.clear(N::TALIA.auto_rdfs.context)
39
+ ActiveRDF::FederationManager.clear(N::TALIA.auto_rdfs.context)
40
40
 
41
41
  # This gets all OWL classes in the store
42
- all_qry = Query.new(N::URI).distinct.select(:class)
42
+ all_qry = ActiveRDF::Query.new(N::URI).distinct.select(:class)
43
43
  all_qry.where(:class, N::RDF::type, N::OWL.Class)
44
44
  all_owl = all_qry.execute
45
45
 
46
46
  # This gets all OWL classes that already have an RDF class attached
47
- qry_rdfs = Query.new(N::URI).distinct.select(:class)
47
+ qry_rdfs = ActiveRDF::Query.new(N::URI).distinct.select(:class)
48
48
  qry_rdfs.where(:class, N::RDF::type, N::OWL.Class)
49
49
  qry_rdfs.where(:class, N::RDF::type, N::RDFS.Class)
50
50
  classes_with_rdfs = qry_rdfs.execute
@@ -76,7 +76,7 @@ module TaliaUtil
76
76
  class_hash.each do |klass, status|
77
77
  if(status == :has_rdfs_class)
78
78
  modified = modified + 1
79
- FederationManager.add(N::URI.new(klass), N::RDF.type, N::RDFS.Class, N::TALIA.auto_rdfs_context)
79
+ ActiveRDF::FederationManager.add(N::URI.new(klass), N::RDF.type, N::RDFS.Class, N::TALIA.auto_rdfs_context)
80
80
  end
81
81
  yield(class_hash.size) if(block_given?)
82
82
  end
@@ -0,0 +1,20 @@
1
+ module TaliaUtil
2
+
3
+ # Some helper methods to deal with URI and IRI strings
4
+ module UriHelper
5
+
6
+ # Removes all characters that are illegal in IRIs, so that the
7
+ # URIs can be imported
8
+ def irify(uri)
9
+ N::URI.new(uri.to_s.gsub( /[<>"{}|\\^`\s]/, '+')).to_s
10
+ end
11
+
12
+ # Sanitize an URI to be passed into SPARQL queries
13
+ def sanitize_sparql(uri_or_string)
14
+ uri_or_string = uri_or_string.to_s.gsub( /[<>"{}|\\^`\s]/, '') # Remove forbidden chars that we know of
15
+ URI.escape(uri_or_string) # Escape everything else
16
+ uri_or_string.gsub('%23', '#') # Revert the hash character, we need that intact
17
+ end
18
+
19
+ end
20
+ end
@@ -25,7 +25,7 @@ module TaliaUtil
25
25
  # Set up the ontologies from the given folder
26
26
  def setup_ontologies
27
27
  # Clear the ontologies from RDF, if possible
28
- adapter = ConnectionPool.write_adapter
28
+ adapter = ActiveRDF::ConnectionPool.write_adapter
29
29
  if(adapter.supports_context?)
30
30
  TaliaCore::RdfImport.clear_file_contexts
31
31
  else
@@ -108,7 +108,7 @@ module TaliaUtil
108
108
 
109
109
  # Flush the RDF store
110
110
  def flush_rdf
111
- ConnectionPool.write_adapter.clear
111
+ ActiveRDF::ConnectionPool.write_adapter.clear
112
112
  end
113
113
 
114
114
  # Remove the data directories
@@ -145,7 +145,7 @@ module TaliaUtil
145
145
  else
146
146
  rec.property_value
147
147
  end
148
- FederationManager.add(subject, predicate, object)
148
+ ActiveRDF::FederationManager.add(subject, predicate, object)
149
149
  yield if(block_given?)
150
150
  end
151
151
 
@@ -155,7 +155,7 @@ module TaliaUtil
155
155
  # are defined outside the core.
156
156
  TaliaCore::ActiveSource.find(:all, :select => 'uri, type AS runtime_type').each do |src|
157
157
  type = (src.runtime_type || 'ActiveSource')
158
- FederationManager.add(src, N::RDF.type, N::TALIA + type)
158
+ ActiveRDF::FederationManager.add(src, N::RDF.type, N::TALIA + type)
159
159
  yield if(block_given?)
160
160
  end
161
161
  end
@@ -0,0 +1,47 @@
1
+ module TaliaUtil
2
+ module Xml
3
+
4
+ # Base class for builders that create XML representations. This uses a Builder::XmlMarkup object
5
+ # in the background which does the actual XML writing.
6
+ #
7
+ # All builders will be used through the #open method, which can be passed either a Builder::XmlMarkup
8
+ # object, or the options to create one.
9
+ #
10
+ # Subclasses must provide a build_structure method that creates the outer structure of the XML
11
+ class BaseBuilder
12
+
13
+ # Creates a new builder. The options are equivalent for the options of the
14
+ # underlying Xml builder. The builder itself will be passed to the block that
15
+ # is called by this method.
16
+ # If you pass a :builder option instead, it will use the given builder instead
17
+ # of creating a new one
18
+ def self.open(options)
19
+ my_builder = self.new(options)
20
+ my_builder.send(:build_structure) do
21
+ yield(my_builder)
22
+ end
23
+ end
24
+
25
+ # Builds to a string, using a default builder. This returns the string and otherwise
26
+ # works like #open
27
+ def self.make_xml_string
28
+ xml = ''
29
+ open(:target => xml, :indent => 2) do |builder|
30
+ yield(builder)
31
+ end
32
+
33
+ xml
34
+ end
35
+
36
+ private
37
+
38
+ # Create a new builder
39
+ def initialize(options)
40
+ @builder = options[:builder]
41
+ @builder ||= Builder::XmlMarkup.new(options)
42
+ end
43
+
44
+ end
45
+
46
+ end
47
+ end
@@ -0,0 +1,172 @@
1
+ module TaliaUtil
2
+ module Xml
3
+ # Class for creating xml-rdf data
4
+ class RdfBuilder < BaseBuilder
5
+
6
+ # Writes a simple "flat" triple. If the object is a string, it will be
7
+ # treated as a "value" while an object (ActiveSource or N::URI) will be treated
8
+ # as a "link".
9
+ #
10
+ # Throws an exception if the predicate cannot be turned into a namespaced
11
+ # representation
12
+ def write_triple(subject, predicate, object)
13
+ subject = subject.respond_to?(:uri) ? subject.uri.to_s : subject
14
+ predicate = predicate.respond_to?(:uri) ? predicate : N::URI.new(predicate)
15
+ @builder.rdf :Description, "rdf:about" => subject do
16
+ write_predicate(predicate, [ object ])
17
+ end
18
+ end
19
+
20
+ # Writes all the given triples.
21
+ def write_triples(triples)
22
+ triples.each do |triple|
23
+ write_triple(*triple)
24
+ end
25
+ end
26
+
27
+ #
28
+ def self.open_for_triples(triples, options = nil)
29
+ my_builder = self.new(options)
30
+
31
+ triple_hash = my_builder.send(:prepare_triples, triples)
32
+
33
+ my_builder.send(:build_structure) do
34
+ my_builder.send(:write_for_triples, triple_hash)
35
+ end
36
+ end
37
+
38
+
39
+ def self.xml_string_for_triples(triples)
40
+ xml = ''
41
+ open_for_triples(triples, :target => xml, :indent => 2)
42
+ xml
43
+ end
44
+
45
+ private
46
+
47
+
48
+ def prepare_triples(triples)
49
+ triple_hash = {}
50
+ triples.each do |triple|
51
+ subject = triple.shift
52
+ subject = subject.to_s
53
+ predicate = triple.first.to_uri
54
+ namespaced_predicate = predicate.to_name_s
55
+ if(predicate == namespaced_predicate)
56
+ # We have an unknown namespace
57
+ namespaced_predicate = make_predicate_namespace(predicate)
58
+ end
59
+ triple_hash[subject] ||= {}
60
+ triple_hash[subject][N::URI.new(namespaced_predicate)] ||= []
61
+ triple_hash[subject][N::URI.new(namespaced_predicate)] << triple.last
62
+ end
63
+ triple_hash
64
+ end
65
+
66
+ # Write for the open_for_triples
67
+ def write_for_triples(triple_hash)
68
+ triple_hash.each do |subject, values|
69
+ @builder.rdf :Description, 'rdf:about' => subject.to_uri.to_name_s do # Element describing this resource
70
+ values.each do |predicate, objects|
71
+ write_predicate(predicate, objects, false)
72
+ end
73
+ end
74
+ end
75
+ end
76
+
77
+ def make_predicate_namespace(predicate)
78
+ pred_uri = URI.parse(predicate.to_s)
79
+ path_parts = split_uri!(pred_uri)
80
+ raise(ArgumentError, "Illegal predicate URL #{predicate}") if(path_parts[0].blank? || path_parts[1].blank?)
81
+ namespace = make_namespace(pred_uri)
82
+ "#{namespace}:#{path_parts[1]}"
83
+ end
84
+
85
+ def split_uri!(uri)
86
+ if(uri.fragment)
87
+ fragment = uri.fragment
88
+ uri.fragment = ''
89
+ [uri.path, fragment]
90
+ else
91
+ path_parts = /\A(.*[\/#])([^\/#]+)\Z/.match(uri.path)
92
+ uri.path = path_parts[1]
93
+ [ path_parts[1], path_parts[2] ]
94
+ end
95
+ end
96
+
97
+ def make_namespace(namespace_uri)
98
+ candidate = /([^\.]+)(\.[^\.]*)?\Z/.match(namespace_uri.host)[1]
99
+ raise(ArgumentError, "Illegal namespace #{namespace_uri.to_s}") if(candidate.blank?)
100
+ first_candidate = candidate.downcase
101
+ candidate = first_candidate
102
+ counter = 1
103
+ additional_namespaces[candidate.to_sym] ||= namespace_uri.to_s
104
+ while(additional_namespaces[candidate.to_sym] != namespace_uri.to_s)
105
+ counter += 1
106
+ candidate = "#{first_candidate}#{counter}"
107
+ additional_namespaces[candidate.to_sym] ||= namespace_uri.to_s
108
+ end
109
+ candidate
110
+ end
111
+
112
+ # Build the structure for the XML file and pass on to
113
+ # the given block
114
+ def build_structure
115
+ @builder.rdf :RDF, namespaces do
116
+ yield
117
+ end
118
+ end
119
+
120
+ def additional_namespaces
121
+ @additional_namespaces ||= {}
122
+ end
123
+
124
+ def namespaces
125
+ namespaces = self.class.namespaces
126
+ additional_namespaces.each { |key, value| namespaces["xmlns:#{key.to_s}"] = value.to_s }
127
+ namespaces
128
+ end
129
+
130
+ def self.namespaces
131
+ @namespaces ||= begin
132
+ namespaces = {}
133
+ N::Namespace.shortcuts.each { |key, value| namespaces["xmlns:#{key.to_s}"] = value.to_s }
134
+ namespaces
135
+ end
136
+ end
137
+
138
+ # Build an rdf/xml string for one predicate, with the given values
139
+ def write_predicate(predicate, values, check_predicate = true)
140
+ values.each { |val| write_single_predicate(predicate, val, check_predicate) }
141
+ end # end method
142
+
143
+ def write_single_predicate(predicate, value, check_predicate = true)
144
+ is_property = value.respond_to?(:uri)
145
+ value_properties = is_property ? { 'value' => value } : extract_values(value.to_s)
146
+ value = value_properties.delete('value')
147
+ predicate_name = predicate.to_name_s
148
+ raise(ArgumentError, "Cannot turn predicate #{predicate} into namespace name") if(check_predicate && (predicate == predicate_name))
149
+ @builder.tag!(predicate.to_name_s, value_properties) do
150
+ if(is_property)
151
+ @builder.rdf :Description, 'rdf:about' => value.uri.to_s
152
+ else
153
+ @builder.text!(value)
154
+ end
155
+ end
156
+ end
157
+
158
+ # Splits up the value, extracting encoded language codes and RDF data types. The
159
+ # result will be returned as a hash, with the "true" value being "value"
160
+ def extract_values(value)
161
+ prop_string = TaliaCore::PropertyString.parse(value)
162
+ result = {}
163
+ result['value'] = prop_string
164
+ result['rdf:datatype'] = prop_string.type if(prop_string.type)
165
+ result['xml:lang'] = prop_string.lang if(prop_string.lang)
166
+
167
+ result
168
+ end
169
+
170
+ end
171
+ end
172
+ end
@@ -0,0 +1,116 @@
1
+ require File.join(File.dirname(__FILE__), '..', 'test_helper')
2
+ require 'rexml/document'
3
+
4
+ module Swicky
5
+
6
+ class JsonEncoderTest < ActiveSupport::TestCase
7
+
8
+ def setup
9
+ @encoder = JsonEncoder.new(test_triples)
10
+ end
11
+
12
+ def test_make_predicate_local
13
+ local = @encoder.send(:make_predicate_local, N::TALIA.foobar)
14
+ assert_equal('foobar', local)
15
+ assert_equal({ 'foobar' => { 'uri' => N::TALIA.foobar.to_s, 'valueType' => 'item' } }, @encoder.instance_variable_get(:@properties_hash))
16
+ end
17
+
18
+ def test_make_predicate_local_multi
19
+ @encoder.send(:make_predicate_local, N::TALIA.foobar)
20
+ @encoder.send(:make_predicate_local, N::LOCAL.foobar)
21
+ @encoder.send(:make_predicate_local, N::TALIA.foobar)
22
+ local = @encoder.send(:make_predicate_local, N::RDF.foobar)
23
+ assert_equal('foobar3', local)
24
+ end
25
+
26
+ def test_make_type_local
27
+ local = @encoder.send(:make_type_local, N::TALIA.Foobar)
28
+ assert_equal('Foobar', local)
29
+ assert_equal({ 'Foobar' => { 'uri' => N::TALIA.Foobar.to_s } }, @encoder.instance_variable_get(:@types_hash))
30
+ end
31
+
32
+ def test_build_item
33
+ item = @encoder.send(:build_item, N::LOCAL.Foo, {
34
+ N::RDF.type => [ N::TALIA.Foobar ],
35
+ N::TALIA.hasIt => ['blarg', 'bar'],
36
+ N::TALIA.strangeThing => ['what'],
37
+ 'label' => 'bar'
38
+ })
39
+ assert_equal([{
40
+ 'uri' => N::LOCAL.Foo.to_s,
41
+ 'type' => [ 'Foobar' ],
42
+ 'label' => 'bar',
43
+ 'hasIt' => ['blarg', 'bar'],
44
+ 'strangeThing' => 'what'
45
+ }], item)
46
+ end
47
+
48
+ def test_to_json
49
+ assert_equal(expected_result.to_json, @encoder.to_json)
50
+ end
51
+
52
+ private
53
+
54
+ def expected_result
55
+ {
56
+ "items" => [
57
+ {
58
+ "uri"=>N::LOCAL.foobar.to_s,
59
+ "type"=>["MyType"],
60
+ "label"=>"foobar",
61
+ "first"=>["worksit", "worksit2"]
62
+ },
63
+ {
64
+ "uri"=>N::TALIA.whatever.to_s,
65
+ "type"=>["Resource"],
66
+ "label"=>"whatever",
67
+ "predicate"=>"The cool thing",
68
+ "first2"=>"The cool thing"
69
+ },
70
+ {
71
+ "uri"=>"http://www.barbaa.com/fun",
72
+ "type"=>["Resource"],
73
+ "label"=>"The cool thing",
74
+ "predicate"=>"whatever"
75
+ }
76
+ ],
77
+ "types" => {
78
+ "MyType"=>
79
+ {
80
+ "uri"=>N::TALIA.MyType.to_s
81
+ },
82
+ "Resource"=> {
83
+ "uri"=>"http://www.w3.org/1999/02/22-rdf-syntax-ns#Resource"
84
+ }
85
+ },
86
+ "properties"=> {
87
+ "first"=> {
88
+ "uri"=>"http://www.foobar.com/bar/moo/first",
89
+ "valueType"=>"item"
90
+ },
91
+ "predicate"=>{
92
+ "uri"=>N::TALIA.predicate.to_s,
93
+ "valueType"=>"item"
94
+ },
95
+ "first2"=>{
96
+ "uri"=>"http://www.foobar.com/bar/moo#first", "valueType"=>"item"
97
+ }
98
+ }
99
+ }
100
+ end
101
+
102
+
103
+ def test_triples
104
+ [
105
+ [ N::LOCAL.foobar, 'http://www.foobar.com/bar/moo/first', "worksit"],
106
+ [ N::LOCAL.foobar, 'http://www.foobar.com/bar/moo/first', "worksit2"],
107
+ [ N::LOCAL.foobar, N::RDF.type, N::TALIA.MyType ],
108
+ [ N::TALIA.whatever, N::TALIA.predicate, N::URI.new('http://www.barbaa.com/fun')],
109
+ [ N::TALIA.whatever, 'http://www.foobar.com/bar/moo#first', N::URI.new('http://www.barbaa.com/fun')],
110
+ [ "http://www.barbaa.com/fun".to_uri, N::RDFS.label, "The cool thing"],
111
+ [ "http://www.barbaa.com/fun".to_uri, N::TALIA.predicate, N::TALIA.whatever]
112
+ ]
113
+ end
114
+ end
115
+
116
+ end
@@ -0,0 +1,107 @@
1
+ require File.join(File.dirname(__FILE__), '..', 'test_helper')
2
+ require 'rexml/document'
3
+
4
+ module Swicky
5
+
6
+ # Test the ActiveSource
7
+ class NotebookTest < ActiveSupport::TestCase
8
+
9
+
10
+ def setup
11
+ setup_once(:flush) { TaliaCore::TestHelper::flush_store }
12
+ @notebook = Notebook.new('dan', 'booky')
13
+ @testpointer = "http://dbin.org/swickynotes/demo/HanselAndGretel.htm#xpointer(start-point(string-range(//DIV[@id='http://dbin.org/swickynotes/demo/HG_1']/P[1]/SPAN[1]/text()[1],'',0))/range-to(string-range(//DIV[@id='http://dbin.org/swickynotes/demo/HG_1']/P[1]/SPAN[1]/text()[1],'',266)))"
14
+ end
15
+
16
+ def teardown
17
+ @notebook.delete
18
+ end
19
+
20
+ def test_url
21
+ assert_equal(@notebook.url, N::LOCAL + 'users/dan/swicky_notebooks/booky')
22
+ end
23
+
24
+ def test_user_url
25
+ assert_equal(@notebook.user_url, N::LOCAL + 'users/dan')
26
+ end
27
+
28
+ def test_load
29
+ assert_notebook_empty
30
+ load_notebook
31
+ assert_notebook_full
32
+ end
33
+
34
+ def test_delete
35
+ load_notebook
36
+ @notebook.delete
37
+ assert_notebook_empty
38
+ end
39
+
40
+ def test_data
41
+ load_notebook
42
+ assert_equal(@notebook.data.size, 236)
43
+ end
44
+
45
+ def test_xml_data
46
+ load_notebook
47
+ xml_data = @notebook.xml_data
48
+ assert_kind_of(String, xml_data)
49
+ assert_not_equal('', xml_data)
50
+ # Check xml validity
51
+ assert_nothing_raised { REXML::Document.new(xml_data) }
52
+ end
53
+
54
+ def test_find_all_empty
55
+ assert_equal([], Notebook.find_all)
56
+ end
57
+
58
+ def test_find_all_existing
59
+ load_notebook
60
+ assert_equal([@notebook.url], Notebook.find_all)
61
+ end
62
+
63
+ def test_find_all_user
64
+ load_notebook
65
+ assert_equal([@notebook.url], Notebook.find_all('dan'))
66
+ end
67
+
68
+ def test_find_all_user_nonexistent
69
+ load_notebook
70
+ assert_equal([], Notebook.find_all('mic'))
71
+ end
72
+
73
+ def test_get_coordinates
74
+ load_notebook
75
+ coords = Notebook.coordinates_for("http://dbin.org/swickynotes/demo/HanselAndGretel.htm")
76
+ assert_equal([ @testpointer ], coords)
77
+ end
78
+
79
+ def test_annotations_for_url
80
+ load_notebook
81
+ assert_equal(180, Notebook.annotations_for_url("http://discovery-project.eu/ontologies/philoSpace/SourceFragment#ec9796a5349b290a7610763dcbc47af2").size)
82
+ end
83
+
84
+ def test_annotations_for_xpointer
85
+ load_notebook
86
+ assert_equal(180, Notebook.annotations_for_xpointer(@testpointer).size)
87
+ end
88
+
89
+ private
90
+
91
+ def assert_notebook_empty
92
+ assert_equal(0, ActiveRDF::Query.new(N::URI).select(:s, :p, :o).distinct.where(:s, :p, :o, @notebook.url).execute.size)
93
+ assert_equal(0, ActiveRDF::Query.new(N::URI).select(:user).where(:user, N::TALIA.hasSwickyNotebook, :notebook).where(:notebook, N::RDF.type, N::TALIA.SwickyNotebook).execute.size)
94
+ end
95
+
96
+ def assert_notebook_full
97
+ assert_equal(236, ActiveRDF::Query.new(N::URI).select(:s, :p, :o).distinct.where(:s, :p, :o, @notebook.url).execute.size)
98
+ assert_equal(1, ActiveRDF::Query.new(N::URI).select(:user).where(:user, N::TALIA.hasSwickyNotebook, :notebook).where(:notebook, N::RDF.type, N::TALIA.SwickyNotebook).execute.size)
99
+ end
100
+
101
+ def load_notebook
102
+ @notebook.load(TaliaCore::TestHelper.fixture_file("notebook.rdf"))
103
+ end
104
+
105
+ end
106
+
107
+ end
@@ -84,7 +84,7 @@ module TaliaCore
84
84
  res.save
85
85
 
86
86
  # Check if the defaul type was written
87
- rdfs_prop = Query.new(N::SourceClass).distinct(:t).where(res,N::RDF::type,:t).execute
87
+ rdfs_prop = ActiveRDF::Query.new(N::SourceClass).distinct(:t).where(res,N::RDF::type,:t).execute
88
88
  assert_equal(2, rdfs_prop.size)
89
89
  assert(rdfs_prop.include?(N::RDFS.Resource))
90
90
  end