graffiti 2.1
Sign up to get free protection for your applications and to get access to all the features.
- data/COPYING +676 -0
- data/ChangeLog.mtn +233 -0
- data/README.rdoc +129 -0
- data/TODO +30 -0
- data/doc/diagrams/graffiti-classes.svg +157 -0
- data/doc/diagrams/graffiti-deployment.svg +117 -0
- data/doc/diagrams/graffiti-store-sequence.svg +69 -0
- data/doc/diagrams/squish-select-sequence.svg +266 -0
- data/doc/examples/samizdat-rdf-config.yaml +77 -0
- data/doc/examples/samizdat-triggers-pgsql.sql +266 -0
- data/doc/papers/collreif.tex +462 -0
- data/doc/papers/rdf-to-relational-query-translation-icis2009.tex +936 -0
- data/doc/papers/rel-rdf.tex +545 -0
- data/doc/rdf-impl-report.txt +126 -0
- data/graffiti.gemspec +21 -0
- data/lib/graffiti.rb +15 -0
- data/lib/graffiti/debug.rb +34 -0
- data/lib/graffiti/exceptions.rb +20 -0
- data/lib/graffiti/rdf_config.rb +78 -0
- data/lib/graffiti/rdf_property_map.rb +92 -0
- data/lib/graffiti/sql_mapper.rb +916 -0
- data/lib/graffiti/squish.rb +568 -0
- data/lib/graffiti/store.rb +100 -0
- data/setup.rb +1360 -0
- data/test/ts_graffiti.rb +455 -0
- metadata +122 -0
data/ChangeLog.mtn
ADDED
@@ -0,0 +1,233 @@
|
|
1
|
+
-----------------------------------------------------------------
|
2
|
+
Revision: 5f07d75e7786d56d30659b04ac0091fc8bc37fda
|
3
|
+
Ancestor: e13812ed0f84c7e722284750df4ac1a8ef81a501
|
4
|
+
Author: angdraug@debian.org
|
5
|
+
Date: 2009-10-11T12:23:07
|
6
|
+
Branch: graffiti-head
|
7
|
+
|
8
|
+
Deleted entries:
|
9
|
+
doc/diagrams/graffiti_classes.dia
|
10
|
+
Added files:
|
11
|
+
doc/diagrams/graffiti-classes.svg
|
12
|
+
doc/diagrams/graffiti-deployment.svg
|
13
|
+
doc/diagrams/graffiti-store-sequence.svg
|
14
|
+
doc/diagrams/squish-select-sequence.svg
|
15
|
+
|
16
|
+
ChangeLog:
|
17
|
+
|
18
|
+
replaced the old Dia diagram with SVG diagrams produced with BoUML
|
19
|
+
|
20
|
+
-----------------------------------------------------------------
|
21
|
+
Revision: e13812ed0f84c7e722284750df4ac1a8ef81a501
|
22
|
+
Ancestor: e364f136ecc00b4559a0f0d07f257886f48ae4ef
|
23
|
+
Author: angdraug@debian.org
|
24
|
+
Date: 2009-09-06T13:47:40
|
25
|
+
Branch: graffiti-head
|
26
|
+
|
27
|
+
Modified files:
|
28
|
+
README.rdoc
|
29
|
+
|
30
|
+
ChangeLog:
|
31
|
+
|
32
|
+
relational data adaptation instructions added
|
33
|
+
|
34
|
+
-----------------------------------------------------------------
|
35
|
+
Revision: e364f136ecc00b4559a0f0d07f257886f48ae4ef
|
36
|
+
Ancestor: f2ef2d91fb1e29ee91928b5ebf52c22b09def60b
|
37
|
+
Author: angdraug@debian.org
|
38
|
+
Date: 2009-09-06T13:22:12
|
39
|
+
Branch: graffiti-head
|
40
|
+
|
41
|
+
Modified files:
|
42
|
+
README.rdoc
|
43
|
+
|
44
|
+
ChangeLog:
|
45
|
+
|
46
|
+
update language description added
|
47
|
+
|
48
|
+
-----------------------------------------------------------------
|
49
|
+
Revision: f2ef2d91fb1e29ee91928b5ebf52c22b09def60b
|
50
|
+
Ancestor: c5c5ad50f2f0e1159628804eb141c60977483fb7
|
51
|
+
Author: angdraug@debian.org
|
52
|
+
Date: 2009-09-06T13:12:45
|
53
|
+
Branch: graffiti-head
|
54
|
+
|
55
|
+
Modified files:
|
56
|
+
README.rdoc
|
57
|
+
|
58
|
+
ChangeLog:
|
59
|
+
|
60
|
+
query language description added
|
61
|
+
|
62
|
+
-----------------------------------------------------------------
|
63
|
+
Revision: c5c5ad50f2f0e1159628804eb141c60977483fb7
|
64
|
+
Ancestor: c6389322361c36538d626257f8dd957864e7b85e
|
65
|
+
Author: angdraug@debian.org
|
66
|
+
Date: 2009-08-22T12:38:32
|
67
|
+
Branch: graffiti-head
|
68
|
+
|
69
|
+
Modified files:
|
70
|
+
TODO lib/graffiti/rdf_config.rb
|
71
|
+
lib/graffiti/rdf_property_map.rb lib/graffiti/sql_mapper.rb
|
72
|
+
|
73
|
+
ChangeLog:
|
74
|
+
|
75
|
+
move setting of subproperty_of and transitive_closure outside of the RdfPropertyMap constructor; documented some missing pieces
|
76
|
+
|
77
|
+
-----------------------------------------------------------------
|
78
|
+
Revision: c6389322361c36538d626257f8dd957864e7b85e
|
79
|
+
Ancestor: 41a4f5d475227a9df9aae268506bcdb2dbf2e6ab
|
80
|
+
Author: angdraug@debian.org
|
81
|
+
Date: 2009-08-22T12:37:03
|
82
|
+
Branch: graffiti-head
|
83
|
+
|
84
|
+
Modified files:
|
85
|
+
lib/graffiti/squish.rb
|
86
|
+
|
87
|
+
ChangeLog:
|
88
|
+
|
89
|
+
use @db, db shortcut is no longer available
|
90
|
+
|
91
|
+
-----------------------------------------------------------------
|
92
|
+
Revision: 41a4f5d475227a9df9aae268506bcdb2dbf2e6ab
|
93
|
+
Ancestor: bed7201b8512540b0c225add168a66b18cfad5f3
|
94
|
+
Author: angdraug@debian.org
|
95
|
+
Date: 2009-08-05T13:16:50
|
96
|
+
Branch: graffiti-head
|
97
|
+
|
98
|
+
Modified files:
|
99
|
+
lib/graffiti/squish.rb
|
100
|
+
|
101
|
+
ChangeLog:
|
102
|
+
|
103
|
+
allow PostgreSQL full text search operators in expressions
|
104
|
+
|
105
|
+
-----------------------------------------------------------------
|
106
|
+
Revision: bed7201b8512540b0c225add168a66b18cfad5f3
|
107
|
+
Ancestor: 3538ff90e492811cd2c022cf6502439090241d8e
|
108
|
+
Author: angdraug@debian.org
|
109
|
+
Date: 2009-08-02T14:34:09
|
110
|
+
Branch: graffiti-head
|
111
|
+
|
112
|
+
Modified files:
|
113
|
+
lib/graffiti/sql_mapper.rb
|
114
|
+
|
115
|
+
ChangeLog:
|
116
|
+
|
117
|
+
move SqlNodeBinding and SqlExpression out of SqlMapper namespace; move exception raising into check_graph
|
118
|
+
|
119
|
+
-----------------------------------------------------------------
|
120
|
+
Revision: 3538ff90e492811cd2c022cf6502439090241d8e
|
121
|
+
Ancestor: ad944a53e855766391fb1840b09cc47eac78f911
|
122
|
+
Author: angdraug@debian.org
|
123
|
+
Date: 2009-07-30T08:50:54
|
124
|
+
Branch: graffiti-head
|
125
|
+
|
126
|
+
Added files:
|
127
|
+
lib/graffiti/exceptions.rb lib/graffiti/rdf_config.rb
|
128
|
+
lib/graffiti/rdf_property_map.rb lib/graffiti/sql_mapper.rb
|
129
|
+
lib/graffiti/squish.rb lib/graffiti/store.rb
|
130
|
+
Added directories:
|
131
|
+
lib/graffiti
|
132
|
+
Modified files:
|
133
|
+
lib/graffiti.rb
|
134
|
+
|
135
|
+
ChangeLog:
|
136
|
+
|
137
|
+
split Graffiti classes into their own .rb files
|
138
|
+
|
139
|
+
-----------------------------------------------------------------
|
140
|
+
Revision: ad944a53e855766391fb1840b09cc47eac78f911
|
141
|
+
Ancestor: 35e3b7019eda146e755449c86f2b04f035796608
|
142
|
+
Author: angdraug@debian.org
|
143
|
+
Date: 2009-07-28T12:42:47
|
144
|
+
Branch: graffiti-head
|
145
|
+
|
146
|
+
Modified files:
|
147
|
+
README.rdoc
|
148
|
+
|
149
|
+
ChangeLog:
|
150
|
+
|
151
|
+
mention SynCache in README.rdoc
|
152
|
+
|
153
|
+
-----------------------------------------------------------------
|
154
|
+
Revision: 35e3b7019eda146e755449c86f2b04f035796608
|
155
|
+
Ancestor: 7eeecf40a8f1e0127ecc6d2f818bd6d80e0b1f90
|
156
|
+
Author: angdraug@debian.org
|
157
|
+
Date: 2009-07-28T10:56:06
|
158
|
+
Branch: graffiti-head
|
159
|
+
|
160
|
+
Modified files:
|
161
|
+
README.rdoc lib/graffiti.rb test/ts_graffiti.rb
|
162
|
+
|
163
|
+
ChangeLog:
|
164
|
+
|
165
|
+
module initialization fixes
|
166
|
+
|
167
|
+
-----------------------------------------------------------------
|
168
|
+
Revision: 7eeecf40a8f1e0127ecc6d2f818bd6d80e0b1f90
|
169
|
+
Ancestor: 35efa8b3fb65bbe7744fc930dc3ceb5a98564a98
|
170
|
+
Author: angdraug@debian.org
|
171
|
+
Date: 2009-07-28T10:45:31
|
172
|
+
Branch: graffiti-head
|
173
|
+
|
174
|
+
Modified files:
|
175
|
+
README.rdoc
|
176
|
+
|
177
|
+
ChangeLog:
|
178
|
+
|
179
|
+
minor documentation cleanup
|
180
|
+
|
181
|
+
-----------------------------------------------------------------
|
182
|
+
Revision: 35efa8b3fb65bbe7744fc930dc3ceb5a98564a98
|
183
|
+
Ancestor: 60fc13b5ffccadc9990d5303de93e71be30128bb
|
184
|
+
Author: angdraug@debian.org
|
185
|
+
Date: 2009-07-28T10:38:48
|
186
|
+
Branch: graffiti-head
|
187
|
+
|
188
|
+
Added files:
|
189
|
+
doc/diagrams/graffiti_classes.dia
|
190
|
+
Added directories:
|
191
|
+
doc/diagrams
|
192
|
+
Modified files:
|
193
|
+
README.rdoc
|
194
|
+
|
195
|
+
ChangeLog:
|
196
|
+
|
197
|
+
documentation update
|
198
|
+
|
199
|
+
-----------------------------------------------------------------
|
200
|
+
Revision: 60fc13b5ffccadc9990d5303de93e71be30128bb
|
201
|
+
Ancestor: abd14a047ad68bc4e92ca80916e71a39f605b14c
|
202
|
+
Author: angdraug@debian.org
|
203
|
+
Date: 2009-07-27T19:20:47
|
204
|
+
Branch: graffiti-head
|
205
|
+
|
206
|
+
Renamed entries:
|
207
|
+
doc/examples/samizdat-triggers-pgsql-sql to doc/examples/samizdat-triggers-pgsql.sql
|
208
|
+
|
209
|
+
ChangeLog:
|
210
|
+
|
211
|
+
fixed .sql extension for triggers example
|
212
|
+
|
213
|
+
-----------------------------------------------------------------
|
214
|
+
Revision: abd14a047ad68bc4e92ca80916e71a39f605b14c
|
215
|
+
Ancestor:
|
216
|
+
Author: angdraug@debian.org
|
217
|
+
Date: 2009-07-27T19:16:55
|
218
|
+
Branch: graffiti-head
|
219
|
+
|
220
|
+
Added files:
|
221
|
+
COPYING README.rdoc TODO
|
222
|
+
doc/examples/samizdat-rdf-config.yaml
|
223
|
+
doc/examples/samizdat-triggers-pgsql-sql
|
224
|
+
doc/papers/collreif.tex doc/papers/rel-rdf.tex
|
225
|
+
doc/rdf-impl-report.txt lib/graffiti.rb setup.rb
|
226
|
+
test/ts_graffiti.rb
|
227
|
+
Added directories:
|
228
|
+
. doc doc/examples doc/papers lib test
|
229
|
+
|
230
|
+
ChangeLog:
|
231
|
+
|
232
|
+
initial checkin: Graffiti is a spin-off of storage.rb from Samizdat project
|
233
|
+
|
data/README.rdoc
ADDED
@@ -0,0 +1,129 @@
|
|
1
|
+
= Graffiti - relational RDF store for Ruby
|
2
|
+
|
3
|
+
== Synopsis
|
4
|
+
|
5
|
+
require 'sequel'
|
6
|
+
require 'yaml'
|
7
|
+
require 'graffiti'
|
8
|
+
|
9
|
+
db = Sequel.connect(:adapter => 'pg', :database = > dbname)
|
10
|
+
config = File.open('rdf.yaml') {|f| YAML.load(f.read) }
|
11
|
+
store = Graffiti::Store.new(db, config)
|
12
|
+
|
13
|
+
data = store.fetch(%{
|
14
|
+
SELECT ?date, ?title
|
15
|
+
WHERE (dc::date ?r ?date FILTER ?date >= :start)
|
16
|
+
(dc::title ?r ?title)
|
17
|
+
ORDER BY ?date DESC}, 10, 0, :start => Time.now - 24*3600)
|
18
|
+
|
19
|
+
puts data.first[:title]
|
20
|
+
|
21
|
+
|
22
|
+
== Description
|
23
|
+
|
24
|
+
Graffiti is an RDF store based on dynamic translation of RDF queries
|
25
|
+
into SQL. Graffiti allows to map any relational database schema into RDF
|
26
|
+
semantics and vice versa, to store any RDF data in a relational
|
27
|
+
database.
|
28
|
+
|
29
|
+
|
30
|
+
== Requirements
|
31
|
+
|
32
|
+
Graffiti uses Sequel to connect to database backend and provides a
|
33
|
+
DBI-like interface to run RDF queries in Squish query language from Ruby
|
34
|
+
applications. SynCache object cache is used for in-process cache of
|
35
|
+
translated Squish queries.
|
36
|
+
|
37
|
+
|
38
|
+
== Query Language
|
39
|
+
|
40
|
+
Graffiti implements Squish RDF query language with several extensions. A
|
41
|
+
query may include following clauses:
|
42
|
+
|
43
|
+
* SELECT: comma-separated list of result expressions, which may be
|
44
|
+
variables or aggregate functions.
|
45
|
+
|
46
|
+
* WHERE: main graph pattern, described as a list of triple patterns.
|
47
|
+
Each triple is enclosed in parenthesis and includes predicate, subject
|
48
|
+
and object. Predicate must be a URL and may use a shorthand notation
|
49
|
+
with namespace id separated by double colon. Subject may be a URL,
|
50
|
+
internal resource id, or variable. Object may be a URL, internal
|
51
|
+
resource id, variable, or literal. Values of variables bound by the
|
52
|
+
triple pattern may be bound by an optional FILTER expression.
|
53
|
+
|
54
|
+
* EXCEPT: negative graph pattern. Solutions that match any part of the
|
55
|
+
negative graph pattern are excluded from the result set.
|
56
|
+
|
57
|
+
* OPTIONAL: optional graph pattern. Variables defined in the optional
|
58
|
+
pattern are only included in the result set only for solutions that
|
59
|
+
match corresponding parts of the optional graph pattern.
|
60
|
+
|
61
|
+
* LITERAL: global filter expression. Used for expressions that involve
|
62
|
+
variables from different triple patterns.
|
63
|
+
|
64
|
+
* GROUP BY: result set aggregation criteria.
|
65
|
+
|
66
|
+
* ORDER BY: result set ordering criteria.
|
67
|
+
|
68
|
+
* USING: namespaces definitions. Namespaces defined in the RDF store
|
69
|
+
configuration do not have to be repeated here.
|
70
|
+
|
71
|
+
A basic update language is also implemented. A Squish assert statement
|
72
|
+
uses the same structure as a query, with SELECT clause replaced by
|
73
|
+
either one or both of the following clauses:
|
74
|
+
|
75
|
+
* INSERT: list of variables representing new resources to be inserted
|
76
|
+
into the RDF graph.
|
77
|
+
|
78
|
+
* UPDATE: list of assignments of literal expressions to variables bound
|
79
|
+
by a solution.
|
80
|
+
|
81
|
+
Assert statement will only update one solution per invocation, if more
|
82
|
+
solutions match the graph pattern, only the first will be updated.
|
83
|
+
|
84
|
+
|
85
|
+
== Relational Data
|
86
|
+
|
87
|
+
Relational data has to be adapted for RDF access using Graffiti. The
|
88
|
+
adaptation is non-intrusive and will not break compatibility with
|
89
|
+
existing SQL queries.
|
90
|
+
|
91
|
+
Following schema changes are required for all cases:
|
92
|
+
|
93
|
+
* Create rdfs:Resource superclass table with auto-generated primary key.
|
94
|
+
|
95
|
+
* Replace primary keys of mapped subclass tables with foreign keys
|
96
|
+
referencing the rdfs:Resource table (existing foreign keys may need to
|
97
|
+
be updated to reflect this change.
|
98
|
+
|
99
|
+
* Register rdfs:subClassOf inference database triggers to update the
|
100
|
+
rdfs:Re-source table and maintain foreign keys integrity on all
|
101
|
+
changes in mapped subclass tables.
|
102
|
+
|
103
|
+
Following changes may be necessary to support optional RDF mapping
|
104
|
+
features:
|
105
|
+
|
106
|
+
* Register database triggers for other cases of rdfs:subClassOf
|
107
|
+
entailment.
|
108
|
+
|
109
|
+
* Create triples table (required to represent non-relational RDF data
|
110
|
+
and RDF statement reification).
|
111
|
+
|
112
|
+
* Add sub-property qualifier attributes referencing property URIref
|
113
|
+
entry in the rdfs:Resource table for each attribute mapped to a
|
114
|
+
super-property.
|
115
|
+
|
116
|
+
* Create transitive closure tables, register owl:TransitiveProperty
|
117
|
+
inference triggers.
|
118
|
+
|
119
|
+
Example of RDF map and corresponding triggers can be found in
|
120
|
+
doc/examples/.
|
121
|
+
|
122
|
+
|
123
|
+
== Copying
|
124
|
+
|
125
|
+
Copyright (c) 2002-2011 Dmitry Borodaenko <angdraug@debian.org>
|
126
|
+
|
127
|
+
This program is free software.
|
128
|
+
You can distribute/modify this program under the terms of the GNU
|
129
|
+
General Public License version 3 or later.
|
data/TODO
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
Graffiti ToDo List
|
2
|
+
==================
|
3
|
+
|
4
|
+
- generalize RDF storage, implement SPARQL
|
5
|
+
- unit, functional, and performance test suite (in progress)
|
6
|
+
- separate library for RDF storage (done)
|
7
|
+
- investigate alternative backends: FramerD, 3store, Redland
|
8
|
+
-- depends on separate library for RDF storage
|
9
|
+
-- depends on test suite
|
10
|
+
- security: Squish literal condition safety (done), limited number of
|
11
|
+
query clauses (done), dry-run of user-defined query, approvable
|
12
|
+
resource usage
|
13
|
+
- query result set representation
|
14
|
+
- optional patterns and negation (done)
|
15
|
+
- parametrized queries (done)
|
16
|
+
-- cache prepared statements
|
17
|
+
- support blob literals
|
18
|
+
-- depends on parametrized queries
|
19
|
+
- vocabulary entailment: RDF, RDFS, OWL
|
20
|
+
- RDF aggregates storage internalization (Seq, Bag, Alt)
|
21
|
+
- query introspection
|
22
|
+
- storage workflow control (triggers)
|
23
|
+
- transparent (structured) RDF query storage
|
24
|
+
-- depends on RDF aggregates storage
|
25
|
+
-- depends on storage workflow control
|
26
|
+
- subqueries (query premise)
|
27
|
+
-- depends on transparent query storage
|
28
|
+
- chain queries
|
29
|
+
-- depends on native RDF storage
|
30
|
+
|
@@ -0,0 +1,157 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
2
|
+
<!-- Created with Bouml (http://bouml.free.fr/) -->
|
3
|
+
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
4
|
+
<svg width="667" height="486" version="1.1" xmlns="http://www.w3.org/2000/svg">
|
5
|
+
<g>
|
6
|
+
<rect fill="#808080" stroke="none" stroke-opacity="1" x="163" y="22" width="3" height="145" />
|
7
|
+
<rect fill="#808080" stroke="none" stroke-opacity="1" x="21" y="164" width="145" height="3" />
|
8
|
+
<rect fill="#ffffc0" stroke="black" stroke-width="1" stroke-opacity="1" x="17" y="18" width="146" height="146" />
|
9
|
+
<text font-family="Arial" font-size="11" fill="#000000" xml:space="preserve" font-weight="bold" text-anchor="middle" x="90" y="31">SquishQuery</text>
|
10
|
+
<line stroke="black" stroke-opacity="1" x1="17" y1="40" x2="163" y2="40" />
|
11
|
+
<text font-family="Arial" font-size="11" fill="#000000" xml:space="preserve" x="21" y="53">ns</text>
|
12
|
+
<text font-family="Arial" font-size="11" fill="#000000" xml:space="preserve" x="21" y="73">variables</text>
|
13
|
+
<line stroke="black" stroke-opacity="1" x1="17" y1="82" x2="163" y2="82" />
|
14
|
+
<text font-family="Arial" font-size="11" fill="#000000" xml:space="preserve" text-decoration="underline" x="21" y="95">uri_shrink()</text>
|
15
|
+
<text font-family="Arial" font-size="11" fill="#000000" xml:space="preserve" text-decoration="underline" x="21" y="115">ns_shrink()</text>
|
16
|
+
<text font-family="Arial" font-size="11" fill="#000000" xml:space="preserve" x="21" y="135">substitute_literals()</text>
|
17
|
+
<text font-family="Arial" font-size="11" fill="#000000" xml:space="preserve" x="21" y="155">validate_expression()</text>
|
18
|
+
</g>
|
19
|
+
<g>
|
20
|
+
<rect fill="#808080" stroke="none" stroke-opacity="1" x="495" y="24" width="3" height="285" />
|
21
|
+
<rect fill="#808080" stroke="none" stroke-opacity="1" x="271" y="306" width="227" height="3" />
|
22
|
+
<rect fill="#ffffc0" stroke="black" stroke-width="1" stroke-opacity="1" x="267" y="20" width="228" height="286" />
|
23
|
+
<text font-family="Arial" font-size="11" fill="#000000" xml:space="preserve" font-weight="bold" text-anchor="middle" x="381" y="33">SqlMapper</text>
|
24
|
+
<line stroke="black" stroke-opacity="1" x1="267" y1="42" x2="495" y2="42" />
|
25
|
+
<text font-family="Arial" font-size="11" fill="#000000" xml:space="preserve" x="271" y="55">clauses</text>
|
26
|
+
<text font-family="Arial" font-size="11" fill="#000000" xml:space="preserve" x="271" y="75">nodes</text>
|
27
|
+
<text font-family="Arial" font-size="11" fill="#000000" xml:space="preserve" x="271" y="95">from</text>
|
28
|
+
<text font-family="Arial" font-size="11" fill="#000000" xml:space="preserve" x="271" y="115">where</text>
|
29
|
+
<line stroke="black" stroke-opacity="1" x1="267" y1="124" x2="495" y2="124" />
|
30
|
+
<text font-family="Arial" font-size="11" fill="#000000" xml:space="preserve" x="271" y="137">bind()</text>
|
31
|
+
<text font-family="Arial" font-size="11" fill="#000000" xml:space="preserve" x="271" y="157">check_graph()</text>
|
32
|
+
<text font-family="Arial" font-size="11" fill="#000000" xml:space="preserve" x="271" y="177">map_predicates()</text>
|
33
|
+
<text font-family="Arial" font-size="11" fill="#000000" xml:space="preserve" x="271" y="197">label_pattern_components()</text>
|
34
|
+
<text font-family="Arial" font-size="11" fill="#000000" xml:space="preserve" x="271" y="217">map_pattern()</text>
|
35
|
+
<text font-family="Arial" font-size="11" fill="#000000" xml:space="preserve" x="271" y="237">refine_ambiguous_properties()</text>
|
36
|
+
<text font-family="Arial" font-size="11" fill="#000000" xml:space="preserve" x="271" y="257">define_relation_aliases()</text>
|
37
|
+
<text font-family="Arial" font-size="11" fill="#000000" xml:space="preserve" x="271" y="277">transform()</text>
|
38
|
+
<text font-family="Arial" font-size="11" fill="#000000" xml:space="preserve" x="271" y="297">generate_tables_and_conditions()</text>
|
39
|
+
</g>
|
40
|
+
<g>
|
41
|
+
<rect fill="#808080" stroke="none" stroke-opacity="1" x="141" y="335" width="3" height="51" />
|
42
|
+
<rect fill="#808080" stroke="none" stroke-opacity="1" x="43" y="383" width="101" height="3" />
|
43
|
+
<rect fill="#ffffc0" stroke="black" stroke-width="1" stroke-opacity="1" x="39" y="331" width="102" height="52" />
|
44
|
+
<text font-family="Arial" font-size="11" fill="#000000" xml:space="preserve" font-weight="bold" text-anchor="middle" x="90" y="344">SquishSelect</text>
|
45
|
+
<line stroke="black" stroke-opacity="1" x1="39" y1="353" x2="141" y2="353" />
|
46
|
+
<line stroke="black" stroke-opacity="1" x1="39" y1="361" x2="141" y2="361" />
|
47
|
+
<text font-family="Arial" font-size="11" fill="#000000" xml:space="preserve" x="43" y="374">to_sql()</text>
|
48
|
+
</g>
|
49
|
+
<g>
|
50
|
+
<rect fill="#808080" stroke="none" stroke-opacity="1" x="225" y="247" width="3" height="51" />
|
51
|
+
<rect fill="#808080" stroke="none" stroke-opacity="1" x="127" y="295" width="101" height="3" />
|
52
|
+
<rect fill="#ffffc0" stroke="black" stroke-width="1" stroke-opacity="1" x="123" y="243" width="102" height="52" />
|
53
|
+
<text font-family="Arial" font-size="11" fill="#000000" xml:space="preserve" font-weight="bold" text-anchor="middle" x="174" y="256">SquishAssert</text>
|
54
|
+
<line stroke="black" stroke-opacity="1" x1="123" y1="265" x2="225" y2="265" />
|
55
|
+
<line stroke="black" stroke-opacity="1" x1="123" y1="273" x2="225" y2="273" />
|
56
|
+
<text font-family="Arial" font-size="11" fill="#000000" xml:space="preserve" x="127" y="286">assert()</text>
|
57
|
+
</g>
|
58
|
+
<g>
|
59
|
+
<rect fill="#808080" stroke="none" stroke-opacity="1" x="644" y="24" width="3" height="125" />
|
60
|
+
<rect fill="#808080" stroke="none" stroke-opacity="1" x="538" y="146" width="109" height="3" />
|
61
|
+
<rect fill="#ffffc0" stroke="black" stroke-width="1" stroke-opacity="1" x="534" y="20" width="110" height="126" />
|
62
|
+
<text font-family="Arial" font-size="11" fill="#000000" xml:space="preserve" font-weight="bold" text-anchor="middle" x="589" y="33">SqlExpression</text>
|
63
|
+
<line stroke="black" stroke-opacity="1" x1="534" y1="42" x2="644" y2="42" />
|
64
|
+
<text font-family="Arial" font-size="11" fill="#000000" xml:space="preserve" x="538" y="55">parts</text>
|
65
|
+
<line stroke="black" stroke-opacity="1" x1="534" y1="64" x2="644" y2="64" />
|
66
|
+
<text font-family="Arial" font-size="11" fill="#000000" xml:space="preserve" x="538" y="77">to_s()</text>
|
67
|
+
<text font-family="Arial" font-size="11" fill="#000000" xml:space="preserve" x="538" y="97">traverse()</text>
|
68
|
+
<text font-family="Arial" font-size="11" fill="#000000" xml:space="preserve" x="538" y="117">rebind()</text>
|
69
|
+
<text font-family="Arial" font-size="11" fill="#000000" xml:space="preserve" x="538" y="137">eql?()</text>
|
70
|
+
</g>
|
71
|
+
<g>
|
72
|
+
<rect fill="#808080" stroke="none" stroke-opacity="1" x="651" y="183" width="3" height="125" />
|
73
|
+
<rect fill="#808080" stroke="none" stroke-opacity="1" x="531" y="305" width="123" height="3" />
|
74
|
+
<rect fill="#ffffc0" stroke="black" stroke-width="1" stroke-opacity="1" x="527" y="179" width="124" height="126" />
|
75
|
+
<text font-family="Arial" font-size="11" fill="#000000" xml:space="preserve" font-weight="bold" text-anchor="middle" x="589" y="192">SqlNodeBinding</text>
|
76
|
+
<line stroke="black" stroke-opacity="1" x1="527" y1="201" x2="651" y2="201" />
|
77
|
+
<text font-family="Arial" font-size="11" fill="#000000" xml:space="preserve" x="531" y="214">alias</text>
|
78
|
+
<text font-family="Arial" font-size="11" fill="#000000" xml:space="preserve" x="531" y="234">field</text>
|
79
|
+
<line stroke="black" stroke-opacity="1" x1="527" y1="243" x2="651" y2="243" />
|
80
|
+
<text font-family="Arial" font-size="11" fill="#000000" xml:space="preserve" x="531" y="256">to_s()</text>
|
81
|
+
<text font-family="Arial" font-size="11" fill="#000000" xml:space="preserve" x="531" y="276">eql?()</text>
|
82
|
+
<text font-family="Arial" font-size="11" fill="#000000" xml:space="preserve" x="531" y="296">hash()</text>
|
83
|
+
</g>
|
84
|
+
<g>
|
85
|
+
<rect fill="#808080" stroke="none" stroke-opacity="1" x="365" y="342" width="3" height="131" />
|
86
|
+
<rect fill="#808080" stroke="none" stroke-opacity="1" x="271" y="470" width="97" height="3" />
|
87
|
+
<rect fill="#ffffc0" stroke="black" stroke-width="1" stroke-opacity="1" x="267" y="338" width="98" height="132" />
|
88
|
+
<text font-family="Arial" font-size="11" fill="#000000" xml:space="preserve" font-weight="bold" text-anchor="middle" x="316" y="351">Store</text>
|
89
|
+
<line stroke="black" stroke-opacity="1" x1="267" y1="360" x2="365" y2="360" />
|
90
|
+
<line stroke="black" stroke-opacity="1" x1="267" y1="368" x2="365" y2="368" />
|
91
|
+
<text font-family="Arial" font-size="11" fill="#000000" xml:space="preserve" x="271" y="381">get_property()</text>
|
92
|
+
<text font-family="Arial" font-size="11" fill="#000000" xml:space="preserve" x="271" y="401">select_one()</text>
|
93
|
+
<text font-family="Arial" font-size="11" fill="#000000" xml:space="preserve" x="271" y="421">select_all()</text>
|
94
|
+
<text font-family="Arial" font-size="11" fill="#000000" xml:space="preserve" x="271" y="441">assert()</text>
|
95
|
+
<text font-family="Arial" font-size="11" fill="#000000" xml:space="preserve" x="271" y="461">select()</text>
|
96
|
+
</g>
|
97
|
+
<g>
|
98
|
+
<rect fill="#808080" stroke="none" stroke-opacity="1" x="524" y="342" width="3" height="85" />
|
99
|
+
<rect fill="#808080" stroke="none" stroke-opacity="1" x="440" y="424" width="87" height="3" />
|
100
|
+
<rect fill="#ffffc0" stroke="black" stroke-width="1" stroke-opacity="1" x="436" y="338" width="88" height="86" />
|
101
|
+
<text font-family="Arial" font-size="11" fill="#000000" xml:space="preserve" font-weight="bold" text-anchor="middle" x="480" y="351">RdfConfig</text>
|
102
|
+
<line stroke="black" stroke-opacity="1" x1="436" y1="360" x2="524" y2="360" />
|
103
|
+
<text font-family="Arial" font-size="11" fill="#000000" xml:space="preserve" x="440" y="373">ns</text>
|
104
|
+
<text font-family="Arial" font-size="11" fill="#000000" xml:space="preserve" x="440" y="393">map</text>
|
105
|
+
<line stroke="black" stroke-opacity="1" x1="436" y1="402" x2="524" y2="402" />
|
106
|
+
<text font-family="Arial" font-size="11" fill="#000000" xml:space="preserve" x="440" y="415">ns_expand()</text>
|
107
|
+
</g>
|
108
|
+
<g>
|
109
|
+
<line stroke="black" stroke-opacity="1" x1="266" y1="31" x2="260" y2="25" />
|
110
|
+
<line stroke="black" stroke-opacity="1" x1="266" y1="31" x2="260" y2="37" />
|
111
|
+
<line stroke="black" stroke-opacity="1" x1="167" y1="31" x2="266" y2="31" />
|
112
|
+
</g>
|
113
|
+
<g>
|
114
|
+
<line stroke="black" stroke-opacity="1" x1="92" y1="330" x2="92" y2="174" />
|
115
|
+
<line stroke="black" stroke-opacity="1" x1="92" y1="168" x2="86" y2="174" />
|
116
|
+
<line stroke="black" stroke-opacity="1" x1="92" y1="168" x2="98" y2="174" />
|
117
|
+
<line stroke="black" stroke-opacity="1" x1="86" y1="174" x2="98" y2="174" />
|
118
|
+
</g>
|
119
|
+
<g>
|
120
|
+
<line stroke="black" stroke-opacity="1" x1="162" y1="242" x2="129" y2="173" />
|
121
|
+
<line stroke="black" stroke-opacity="1" x1="127" y1="168" x2="124" y2="175" />
|
122
|
+
<line stroke="black" stroke-opacity="1" x1="127" y1="168" x2="134" y2="170" />
|
123
|
+
<line stroke="black" stroke-opacity="1" x1="124" y1="175" x2="134" y2="170" />
|
124
|
+
</g>
|
125
|
+
<g>
|
126
|
+
<line stroke="black" stroke-opacity="1" x1="533" y1="32" x2="527" y2="26" />
|
127
|
+
<line stroke="black" stroke-opacity="1" x1="533" y1="32" x2="527" y2="38" />
|
128
|
+
<line stroke-dasharray="4,4" stroke="black" stroke-opacity="1" x1="499" y1="32" x2="533" y2="32" />
|
129
|
+
</g>
|
130
|
+
<g>
|
131
|
+
<line stroke="black" stroke-opacity="1" x1="591" y1="178" x2="597" y2="172" />
|
132
|
+
<line stroke="black" stroke-opacity="1" x1="591" y1="178" x2="585" y2="172" />
|
133
|
+
<line stroke="black" stroke-opacity="1" x1="591" y1="150" x2="591" y2="178" />
|
134
|
+
<polygon fill="#ffffff" stroke="black" stroke-opacity="1" points="591,150 597,156 591,162 585,156" />
|
135
|
+
</g>
|
136
|
+
<g>
|
137
|
+
<line stroke="black" stroke-opacity="1" x1="189" y1="299" x2="186" y2="307" />
|
138
|
+
<line stroke="black" stroke-opacity="1" x1="189" y1="299" x2="197" y2="301" />
|
139
|
+
<line stroke-dasharray="4,4" stroke="black" stroke-opacity="1" x1="266" y1="444" x2="189" y2="299" />
|
140
|
+
</g>
|
141
|
+
<g>
|
142
|
+
<line stroke="black" stroke-opacity="1" x1="142" y1="387" x2="144" y2="395" />
|
143
|
+
<line stroke="black" stroke-opacity="1" x1="142" y1="387" x2="150" y2="384" />
|
144
|
+
<line stroke-dasharray="4,4" stroke="black" stroke-opacity="1" x1="266" y1="459" x2="142" y2="387" />
|
145
|
+
</g>
|
146
|
+
<g>
|
147
|
+
<line stroke="black" stroke-opacity="1" x1="435" y1="350" x2="429" y2="344" />
|
148
|
+
<line stroke="black" stroke-opacity="1" x1="435" y1="350" x2="429" y2="356" />
|
149
|
+
<line stroke="black" stroke-opacity="1" x1="369" y1="350" x2="435" y2="350" />
|
150
|
+
</g>
|
151
|
+
<g>
|
152
|
+
<text font-family="Arial" font-size="11" fill="#000000" xml:space="preserve" x="179" y="18">sql_mapper</text>
|
153
|
+
</g>
|
154
|
+
<g>
|
155
|
+
<text font-family="Arial" font-size="11" fill="#000000" xml:space="preserve" x="386" y="337">config</text>
|
156
|
+
</g>
|
157
|
+
</svg>
|