graffiti 2.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.
- 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>
|