-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathoffshoreleaks_schema.tql
314 lines (243 loc) · 8.03 KB
/
offshoreleaks_schema.tql
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
define
################
################
## RELATIONS ##
################
################
directed_relation sub relation,
relates source,
relates target,
owns link,
owns start_date,
owns end_date,
owns sourceID,
owns valid_until,
abstract;
registered_address sub directed_relation,
relates has_address as source,
relates is_address as target;
officer_of sub directed_relation,
relates is_officer as source,
relates has_officer as target,
owns status;
intermediary_of sub directed_relation,
relates is_intermediary as source,
relates has_intermediary as target;
underlying sub directed_relation,
relates is_underlying as source,
relates has_underlying as target;
undirected_relation sub relation,
relates related,
owns link,
owns start_date,
owns end_date,
owns sourceID,
owns valid_until,
abstract;
connected_to sub undirected_relation,
relates is_connected_to as related;
similar sub undirected_relation,
relates similar_to as related;
similar_company_as sub undirected_relation,
relates is_similar_company_as as related;
same_as sub undirected_relation,
relates is_same_as as related;
probably_same_officer_as sub same_as,
relates is_probably_same_officer_as as is_same_as;
same_intermediary_as sub same_as,
relates is_same_intermediary_as as is_same_as;
same_company_as sub same_as,
relates is_same_company_as as is_same_as;
same_address_as sub same_as,
relates is_same_address_as as is_same_as;
same_id_as sub same_as,
relates has_same_id_as as is_same_as;
same_name_as sub same_as,
relates has_same_name_as as is_same_as;
################# relations to be inferred through rules at runtime ################
# inferred relations between entities
inferrable_relation sub relation,
relates is_connected_to_inferred,
abstract;
# inferred relations between entities and relations
share_officer_and_intermediary sub inferrable_relation,
relates shares_officer_and_intermediary as is_connected_to_inferred;
share_multiple_officers sub inferrable_relation,
relates shares_multiple_officers as is_connected_to_inferred;
same_date_start sub inferrable_relation,
relates has_same_date_start as is_connected_to_inferred;
same_date_stop sub inferrable_relation,
relates has_same_date_stop as is_connected_to_inferred;
################
################
## ENTITIES ##
################
################
# all EntityTypes inherit from node
node sub entity,
owns id @key,
owns node_id @key,
owns name,
owns country_codes,
owns countries,
owns sourceID,
owns valid_until,
owns note,
plays connected_to:is_connected_to,
plays same_id_as:has_same_id_as,
plays same_name_as:has_same_name_as,
plays similar:similar_to,
plays same_as:is_same_as,
abstract;
corporate_entity sub node,
plays registered_address:has_address,
plays officer_of:has_officer,
plays intermediary_of:has_intermediary,
plays underlying:has_underlying,
plays underlying:is_underlying,
plays same_date_start:has_same_date_start,
plays same_date_stop:has_same_date_stop,
plays share_officer_and_intermediary:shares_officer_and_intermediary,
plays share_multiple_officers:shares_multiple_officers,
abstract;
org_entity sub corporate_entity,
owns original_name,
owns former_name,
owns jurisdiction,
owns jurisdiction_description,
owns company_type,
owns address,
owns internal_id,
owns incorporation_date,
owns inactivation_date,
owns struck_off_date,
owns dorm_date,
owns status,
owns service_provider,
owns ibcRUC,
plays same_address_as:is_same_address_as,
plays similar_company_as:is_similar_company_as,
plays same_company_as:is_same_company_as,
# 468 org_entities play registered address, 622 times in total
plays registered_address:is_address;
# a single entity plays officer 3 times but we delete those entries instead
other sub corporate_entity,
owns jurisdiction,
owns jurisdiction_description,
owns incorporation_date,
owns struck_off_date,
owns closed_date;
officer sub corporate_entity,
plays officer_of:is_officer,
# 1015 officers play is_intermediary
plays intermediary_of:is_intermediary,
plays probably_same_officer_as:is_probably_same_officer_as;
intermediary sub corporate_entity,
owns status,
owns internal_id,
owns address,
plays same_address_as:is_same_address_as,
plays intermediary_of:is_intermediary,
plays same_intermediary_as:is_same_intermediary_as,
# 1186 intermediaries play is_officer 50487 times in total
plays officer_of:is_officer;
node_address sub node,
owns address,
plays same_address_as:is_same_address_as,
plays registered_address:is_address;
################
################
## ATTRIBUTES ##
################
################
date_start sub attribute,
value datetime,
abstract;
start_date sub date_start;
incorporation_date sub date_start;
date_stop sub attribute,
value datetime,
abstract;
end_date sub date_stop;
inactivation_date sub date_stop;
struck_off_date sub date_stop;
dorm_date sub date_stop;
closed_date sub date_stop;
location sub attribute,
value string,
abstract;
address sub location;
jurisdiction sub location;
jurisdiction_description sub location;
countries sub location;
country_codes sub location;
identifier sub attribute,
value string,
abstract;
id sub identifier;
node_id sub identifier;
link sub identifier;
name sub identifier;
former_name sub identifier;
original_name sub identifier;
internal_id sub identifier;
ibcRUC sub identifier;
descriptor sub attribute,
value string,
abstract;
status sub descriptor;
company_type sub descriptor;
service_provider sub descriptor;
metadata sub attribute,
value string,
abstract;
valid_until sub metadata;
note sub metadata;
sourceID sub metadata;
################
################
##### RULES ####
################
################
rule same_date_start_rule:
when {
$x1 isa corporate_entity, has date_start $es;
$x2 isa corporate_entity, has date_start $es;
not {$x1 is $x2;};
} then {
(has_same_date_start: $x1, has_same_date_start: $x2) isa same_date_start;
};
rule same_date_stop_rule:
when {
$x1 isa corporate_entity, has date_stop $es;
$x2 isa corporate_entity, has date_stop $es;
not {$x1 is $x2;};
} then {
(has_same_date_stop: $x1, has_same_date_stop: $x2) isa same_date_stop;
};
# rules for inferring relations between entities
rule share_multiple_officers_rule:
when {
$x1 isa corporate_entity;
$x2 isa corporate_entity;
$officer_of11 (has_officer:$x1, is_officer:$officer1) isa! officer_of;
$officer_of12 (has_officer:$x1, is_officer:$officer2) isa! officer_of;
$officer_of21 (has_officer:$x2, is_officer:$officer1) isa! officer_of;
$officer_of22 (has_officer:$x2, is_officer:$officer2) isa! officer_of;
not { $x1 is $x2; };
} then {
(shares_multiple_officers:$x1, shares_multiple_officers:$x2) isa share_multiple_officers;
};
# rule about nodes that share officer and intermediary
rule share_officer_and_intermediary_rule:
when {
$x1 isa corporate_entity;
$x2 isa corporate_entity;
$intermediary_of1 (has_intermediary:$x1, is_intermediary:$intermediary) isa! intermediary_of;
$officer_of1 (has_officer:$x1, is_officer:$officer) isa officer_of;
$intermediary_of2 (has_intermediary:$x2, is_intermediary:$intermediary) isa! intermediary_of;
$officer_of2 (has_officer:$x2, is_officer:$officer) isa officer_of;
not { $x1 is $x2; };
} then {
(shares_officer_and_intermediary: $x1, shares_officer_and_intermediary: $x2) isa share_officer_and_intermediary;
};