activerdf 1.6.1 → 1.6.2

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG CHANGED
@@ -1,3 +1,6 @@
1
+ == activerdf (1.6.2) Fri, 03 Aug 2007 14:07:54 +0100
2
+ * initial support for FILTERs in SPARQL
3
+
1
4
  == activerdf (1.6.1) Thu, 19 Apr 2007 22:57:01 +0100
2
5
  * fix bug 107280: add support for full query options (including context) in dynamic finders
3
6
 
@@ -6,7 +6,8 @@ require 'federation/federation_manager'
6
6
  # data source. In all clauses symbols represent variables:
7
7
  # Query.new.select(:s).where(:s,:p,:o).
8
8
  class Query
9
- attr_reader :select_clauses, :where_clauses, :sort_clauses, :keywords, :limits, :offsets, :reverse_sort_clauses
9
+ attr_reader :select_clauses, :where_clauses, :sort_clauses, :keywords, :limits, :offsets, :reverse_sort_clauses, :filter_clauses
10
+
10
11
  bool_accessor :distinct, :ask, :select, :count, :keyword, :reasoning
11
12
 
12
13
  def initialize
@@ -16,6 +17,7 @@ class Query
16
17
  @select_clauses = []
17
18
  @where_clauses = []
18
19
  @sort_clauses = []
20
+ @filter_clauses = []
19
21
  @keywords = {}
20
22
  @reasoning = true
21
23
  @reverse_sort_clauses = []
@@ -67,6 +69,34 @@ class Query
67
69
  self
68
70
  end
69
71
 
72
+ # adds one or more generic filters
73
+ # NOTE: you have to use SPARQL syntax for variables, eg. regex(?s, 'abc')
74
+ def filter *s
75
+ # add filter clauses
76
+ @filter_clauses << s
77
+ @filter_clauses.uniq!
78
+
79
+ self
80
+ end
81
+
82
+ # adds regular expression filter on one variable
83
+ # variable is Ruby symbol that appears in select/where clause, regex is Ruby
84
+ # regular expression
85
+ def filter_regexp(variable, regexp)
86
+ raise(ActiveRdfError, "variable must be a symbol") unless variable.is_a? Symbol
87
+ raise(ActiveRdfError, "regexp must be a ruby regexp") unless regexp.is_a? Regexp
88
+
89
+ filter "regex(?#{variable}, #{regexp.inspect.gsub('/','"')})"
90
+ end
91
+ alias :filter_regex :filter_regexp
92
+
93
+ def filter_operator(variable, operator, operand)
94
+ raise(ActiveRdfError, "variable must be a Symbol") unless variable.is_a? Symbol
95
+
96
+ filter "(?#{variable} #{operator} #{operand}"
97
+ end
98
+
99
+
70
100
  # adds reverse sorting predicates
71
101
  def reverse_sort *s
72
102
  # add sort clauses without duplicates
@@ -10,7 +10,7 @@ class Query2SPARQL
10
10
  select_clauses = query.select_clauses.collect{|s| construct_clause(s)}
11
11
 
12
12
  str << "SELECT #{distinct}#{select_clauses.join(' ')} "
13
- str << "WHERE { #{where_clauses(query)} }"
13
+ str << "WHERE { #{where_clauses(query)} #{filter_clauses(query)}}"
14
14
  elsif query.ask?
15
15
  str << "ASK { #{where_clauses(query)} }"
16
16
  end
@@ -18,6 +18,11 @@ class Query2SPARQL
18
18
  return str
19
19
  end
20
20
 
21
+ # concatenate filters in query
22
+ def self.filter_clauses(query)
23
+ "FILTER #{query.filter_clauses.join(" ")}" unless query.filter_clauses.empty?
24
+ end
25
+
21
26
  # concatenate each where clause using space (e.g. 's p o')
22
27
  # and concatenate the clauses using dot, e.g. 's p o . s2 p2 o2 .'
23
28
  def self.where_clauses(query)
metadata CHANGED
@@ -1,10 +1,10 @@
1
1
  --- !ruby/object:Gem::Specification
2
- rubygems_version: 0.9.2
2
+ rubygems_version: 0.9.4
3
3
  specification_version: 1
4
4
  name: activerdf
5
5
  version: !ruby/object:Gem::Version
6
- version: 1.6.1
7
- date: 2007-04-19 00:00:00 +01:00
6
+ version: 1.6.2
7
+ date: 2007-08-03 00:00:00 +01:00
8
8
  summary: Offers object-oriented access to RDF (with adapters to several datastores).
9
9
  require_paths:
10
10
  - lib
@@ -33,43 +33,43 @@ files:
33
33
  - README
34
34
  - CHANGELOG
35
35
  - test/federation
36
- - test/objectmanager
37
- - test/queryengine
38
- - test/common.rb
39
- - test/test_adapters.rb
40
- - test/test_person_data.nt
41
- - test/small-one.nt
42
- - test/small-two.nt
43
36
  - test/federation/test_federation_manager.rb
44
37
  - test/federation/test_connection_pool.rb
38
+ - test/objectmanager
45
39
  - test/objectmanager/test_resource_reading.rb
46
40
  - test/objectmanager/test_literal.rb
47
41
  - test/objectmanager/test_namespace.rb
48
42
  - test/objectmanager/test_object_manager.rb
49
43
  - test/objectmanager/test_resource_writing.rb
44
+ - test/queryengine
50
45
  - test/queryengine/test_ntriples_parser.rb
51
46
  - test/queryengine/test_query.rb
52
47
  - test/queryengine/test_query2jars2.rb
53
48
  - test/queryengine/test_query2sparql.rb
54
49
  - test/queryengine/test_query_engine.rb
50
+ - test/common.rb
51
+ - test/test_adapters.rb
52
+ - test/test_person_data.nt
53
+ - test/small-one.nt
54
+ - test/small-two.nt
55
55
  - lib/active_rdf
56
- - lib/active_rdf.rb
57
- - lib/active_rdf_log.rb
58
- - lib/active_rdf_helpers.rb
59
56
  - lib/active_rdf/federation
60
- - lib/active_rdf/objectmanager
61
- - lib/active_rdf/queryengine
62
57
  - lib/active_rdf/federation/connection_pool.rb
63
58
  - lib/active_rdf/federation/federation_manager.rb
64
59
  - lib/active_rdf/federation/active_rdf_adapter.rb
60
+ - lib/active_rdf/objectmanager
65
61
  - lib/active_rdf/objectmanager/resource.rb
66
62
  - lib/active_rdf/objectmanager/namespace.rb
67
63
  - lib/active_rdf/objectmanager/literal.rb
68
64
  - lib/active_rdf/objectmanager/object_manager.rb
65
+ - lib/active_rdf/queryengine
69
66
  - lib/active_rdf/queryengine/query.rb
70
67
  - lib/active_rdf/queryengine/query2sparql.rb
71
68
  - lib/active_rdf/queryengine/ntriples_parser.rb
72
69
  - lib/active_rdf/queryengine/query2jars2.rb
70
+ - lib/active_rdf.rb
71
+ - lib/active_rdf_log.rb
72
+ - lib/active_rdf_helpers.rb
73
73
  test_files: []
74
74
 
75
75
  rdoc_options: []