Compare commits
672 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
20f010bd42 | ||
|
|
7bb08363e2 | ||
|
|
b66278aec5 | ||
|
|
b273a77923 | ||
|
|
f689f90e37 | ||
|
|
20bc051103 | ||
|
|
8f57a160e0 | ||
|
|
6f731813bb | ||
|
|
03635e4b12 | ||
|
|
741a7cae2c | ||
|
|
9ea9d90751 | ||
|
|
d8114bec4e | ||
|
|
a352683c6f | ||
|
|
d601d7f34e | ||
|
|
aab976bcc1 | ||
|
|
404a282a7d | ||
|
|
f79724132a | ||
|
|
0b8530db34 | ||
|
|
17d48100d7 | ||
|
|
c6baf82dff | ||
|
|
cde5b49654 | ||
|
|
7316df1ab2 | ||
|
|
300e088b6c | ||
|
|
43e7cb0dac | ||
|
|
e844c9f824 | ||
|
|
eb8790f40b | ||
|
|
e10c825f75 | ||
|
|
0553cd7d66 | ||
|
|
55cb772e92 | ||
|
|
83f247b051 | ||
|
|
950521f187 | ||
|
|
61b88fe602 | ||
|
|
dae66c97d3 | ||
|
|
647e17900a | ||
|
|
72b4eaa68a | ||
|
|
bbb0f7a373 | ||
|
|
bf41ad4ad2 | ||
|
|
d3899762a9 | ||
|
|
47c4dea630 | ||
|
|
140626a936 | ||
|
|
026ef435e1 | ||
|
|
20d4613400 | ||
|
|
b358278067 | ||
|
|
f7a637f0f4 | ||
|
|
eb99585a1d | ||
|
|
841ac47db6 | ||
|
|
3b812946e4 | ||
|
|
9972451d0e | ||
|
|
0faa8100c8 | ||
|
|
7834352617 | ||
|
|
261ba383b6 | ||
|
|
62769f855c | ||
|
|
5eca8a2e1d | ||
|
|
0e8885f4dd | ||
|
|
3bc47a7fb0 | ||
|
|
1698112a9d | ||
|
|
a001f6b9e4 | ||
|
|
dba1ada5e2 | ||
|
|
a6571eefa5 | ||
|
|
347844e341 | ||
|
|
aaf87ee32f | ||
|
|
631ba827ee | ||
|
|
19e3423202 | ||
|
|
8750fddb2d | ||
|
|
8a7eb8ede0 | ||
|
|
4ff40cb4e4 | ||
|
|
d53bd27369 | ||
|
|
90fa373254 | ||
|
|
d290187467 | ||
|
|
dd08a03faa | ||
|
|
79bae4fd3c | ||
|
|
6bf50bbbb7 | ||
|
|
038b72646c | ||
|
|
c570ab994e | ||
|
|
c9ba00fc23 | ||
|
|
c993a681d9 | ||
|
|
fc676dd30f | ||
|
|
54700d9832 | ||
|
|
ce0e267627 | ||
|
|
d0835a1b30 | ||
|
|
44e2de4f0b | ||
|
|
824201ced6 | ||
|
|
80ad432a5c | ||
|
|
9122c18f1e | ||
|
|
8143aac736 | ||
|
|
dde2e42696 | ||
|
|
0f1654e64c | ||
|
|
9ed42aa4f6 | ||
|
|
4e39d1eed4 | ||
|
|
885db51540 | ||
|
|
477c37320d | ||
|
|
dfec837bba | ||
|
|
806a870744 | ||
|
|
8e4c395a78 | ||
|
|
eb552c92c3 | ||
|
|
782940c270 | ||
|
|
b9db4d3c92 | ||
|
|
1b2f9d45ac | ||
|
|
925289a9dc | ||
|
|
adb54c3b5a | ||
|
|
2f37aaaefc | ||
|
|
ca92809cf5 | ||
|
|
4f8babb9ae | ||
|
|
644fbfaae3 | ||
|
|
9d5d11f922 | ||
|
|
13c862f689 | ||
|
|
1031b78ac7 | ||
|
|
03ad3c2089 | ||
|
|
f79d31e153 | ||
|
|
023114fcab | ||
|
|
ac0f5764df | ||
|
|
dc9d060d49 | ||
|
|
3eceefce12 | ||
|
|
f026723aee | ||
|
|
43b5f5e7eb | ||
|
|
41a497dc71 | ||
|
|
39226cdf24 | ||
|
|
9b3dd7201b | ||
|
|
5d20fee494 | ||
|
|
4e30c155ef | ||
|
|
7294052c75 | ||
|
|
ccac93121b | ||
|
|
58742fdf5e | ||
|
|
12efbcc9fd | ||
|
|
0426f0f35e | ||
|
|
04298db9e5 | ||
|
|
799999f051 | ||
|
|
8f8557d733 | ||
|
|
fc6b2d3b80 | ||
|
|
99f5c9fc91 | ||
|
|
3870dac1f8 | ||
|
|
08b0e29f20 | ||
|
|
76d7964e5c | ||
|
|
bc10af81f4 | ||
|
|
14a290b82f | ||
|
|
ba4a4aa5da | ||
|
|
b1cc9c7329 | ||
|
|
25588d13ac | ||
|
|
98ed3260ed | ||
|
|
5e0d47053d | ||
|
|
99dd506f8f | ||
|
|
b9695eb255 | ||
|
|
4389a743b6 | ||
|
|
e40d85b22c | ||
|
|
340937bc85 | ||
|
|
f08e2e3df0 | ||
|
|
77245adbaa | ||
|
|
cb0191f28b | ||
|
|
3f460ce329 | ||
|
|
6397ce2923 | ||
|
|
7e0a668573 | ||
|
|
b6dd8b4519 | ||
|
|
797d3a8d44 | ||
|
|
a98f860d3c | ||
|
|
162a6ff654 | ||
|
|
d3b40b88ea | ||
|
|
a7d6dcfb32 | ||
|
|
d4f9352c61 | ||
|
|
e182017bb0 | ||
|
|
0ba4a6f393 | ||
|
|
2e6dd74b72 | ||
|
|
1412a767ad | ||
|
|
e755d615fc | ||
|
|
974a966576 | ||
|
|
78ce1f7071 | ||
|
|
a647c7ea69 | ||
|
|
8c1538d45e | ||
|
|
48cefe143e | ||
|
|
296f18e41c | ||
|
|
51dce798bc | ||
|
|
63979c19ab | ||
|
|
5da229f198 | ||
|
|
da5c9fb35b | ||
|
|
53f8de39eb | ||
|
|
d570e94f22 | ||
|
|
c9af936b43 | ||
|
|
b9348a5076 | ||
|
|
429072dd18 | ||
|
|
fdd83c93bb | ||
|
|
e0d945f960 | ||
|
|
2478d1dc06 | ||
|
|
543ce252f8 | ||
|
|
bc98cf12f9 | ||
|
|
bfb02afcdf | ||
|
|
4602842e99 | ||
|
|
bbcc6928e7 | ||
|
|
399387e301 | ||
|
|
07687f5e35 | ||
|
|
11508cf310 | ||
|
|
43cf1fd323 | ||
|
|
a6b7321cf0 | ||
|
|
d88adeee15 | ||
|
|
155162eb45 | ||
|
|
592b728611 | ||
|
|
0ab1b278d5 | ||
|
|
f562d711f9 | ||
|
|
1420b1a3e8 | ||
|
|
b9fabc764f | ||
|
|
9db9d86609 | ||
|
|
826a9cdf08 | ||
|
|
d57eb0c20c | ||
|
|
e6111fffff | ||
|
|
cdb9bdb803 | ||
|
|
73492d0217 | ||
|
|
bc9e827703 | ||
|
|
800924db2e | ||
|
|
97361f7f48 | ||
|
|
5bbd9a9d69 | ||
|
|
4435c1d544 | ||
|
|
714994bc3c | ||
|
|
74a0c92b31 | ||
|
|
a9e9e761c0 | ||
|
|
e76f9c1a2e | ||
|
|
3938191666 | ||
|
|
681fa0ce0a | ||
|
|
b4b599d091 | ||
|
|
fd0a417ad1 | ||
|
|
cd2ee5bea3 | ||
|
|
a94bb7f7e2 | ||
|
|
b9be63f193 | ||
|
|
4b45093572 | ||
|
|
6c7e5428dc | ||
|
|
29f0b3e9a1 | ||
|
|
a3dff637e3 | ||
|
|
71b21e4716 | ||
|
|
d49ebea0bd | ||
|
|
d35b9fc3a1 | ||
|
|
80a503c132 | ||
|
|
a0400563da | ||
|
|
369a2ad483 | ||
|
|
50c03a2205 | ||
|
|
2c7fa2d69e | ||
|
|
66c3703f22 | ||
|
|
660c9b6848 | ||
|
|
bf77794d08 | ||
|
|
994c26b58d | ||
|
|
dd3cbc16e8 | ||
|
|
89435073c7 | ||
|
|
5ff3f5b121 | ||
|
|
288bf42aa3 | ||
|
|
178f5c17e6 | ||
|
|
d28cb221da | ||
|
|
8423d24230 | ||
|
|
842e9f7205 | ||
|
|
c562698edf | ||
|
|
a7708255f9 | ||
|
|
697fd814fc | ||
|
|
f30fcfda22 | ||
|
|
26d5a23a3c | ||
|
|
e7129dc41d | ||
|
|
b5b8df6610 | ||
|
|
0616d24ad0 | ||
|
|
94baeb539f | ||
|
|
007b0a35ee | ||
|
|
131ecd4f1e | ||
|
|
c260c5c3df | ||
|
|
723527fb62 | ||
|
|
fc4fcfddf8 | ||
|
|
449204a9d1 | ||
|
|
4252004fc2 | ||
|
|
730f99cf2b | ||
|
|
6223301f6f | ||
|
|
09d499fc01 | ||
|
|
6ef0386a2b | ||
|
|
4edfd3d08a | ||
|
|
410377d3e5 | ||
|
|
6305343672 | ||
|
|
1a0987afeb | ||
|
|
30504c9135 | ||
|
|
cdf6f8f75f | ||
|
|
976b2b02df | ||
|
|
95e737873a | ||
|
|
48b5a82fda | ||
|
|
3b6b6d6b21 | ||
|
|
4691a18407 | ||
|
|
43523ec37d | ||
|
|
f4bd10fa46 | ||
|
|
df5d249246 | ||
|
|
9e3f365ee3 | ||
|
|
41f5b74b8f | ||
|
|
188d7f0e18 | ||
|
|
3052bf8315 | ||
|
|
c34ff82125 | ||
|
|
c483546709 | ||
|
|
ce93e787e6 | ||
|
|
c0e802d1f3 | ||
|
|
0b1d8f3b12 | ||
|
|
1bf7b59905 | ||
|
|
02b0e825f1 | ||
|
|
d569d15360 | ||
|
|
64044b2ce0 | ||
|
|
c0fad917f1 | ||
|
|
857919804d | ||
|
|
a12293e460 | ||
|
|
0ad11a2289 | ||
|
|
ea83f49a0f | ||
|
|
27f240f25c | ||
|
|
ed28ca6983 | ||
|
|
6b89b32e99 | ||
|
|
c7650d6379 | ||
|
|
8e090ca872 | ||
|
|
2e4c0702a6 | ||
|
|
53c5bd1275 | ||
|
|
675a984cc4 | ||
|
|
dc842b7c6b | ||
|
|
e507c31a3d | ||
|
|
a966e25832 | ||
|
|
9367256717 | ||
|
|
aa6b9c803b | ||
|
|
0fd50697f6 | ||
|
|
a8607f9c1a | ||
|
|
e97e0d3477 | ||
|
|
8326d02d3c | ||
|
|
b9911887c2 | ||
|
|
8a1c6323c0 | ||
|
|
bff78b12d6 | ||
|
|
ec749c81dd | ||
|
|
aa7ce23a85 | ||
|
|
0592e10a8c | ||
|
|
c24f56c7cb | ||
|
|
69fa0b5d8b | ||
|
|
f07c1a561b | ||
|
|
954f72ef7e | ||
|
|
23e7ee7ff2 | ||
|
|
6e0e3cd8ea | ||
|
|
6c572992be | ||
|
|
402f7ffce3 | ||
|
|
51d7c53970 | ||
|
|
54f1d8932c | ||
|
|
a169184fca | ||
|
|
6ec4784a53 | ||
|
|
f5a23bc37b | ||
|
|
4e0ec40f51 | ||
|
|
d493c7601a | ||
|
|
23199fc896 | ||
|
|
125b281eac | ||
|
|
7901485e01 | ||
|
|
19f9d6f4e8 | ||
|
|
8755bbc432 | ||
|
|
b00983c580 | ||
|
|
0b3d1febdf | ||
|
|
d42986ff43 | ||
|
|
0e63fcc8b0 | ||
|
|
6c80037fb5 | ||
|
|
e985662313 | ||
|
|
9ed2cfa080 | ||
|
|
33a7d6eff6 | ||
|
|
7c625b3348 | ||
|
|
20bf82a36a | ||
|
|
37f071c065 | ||
|
|
2d79ec5852 | ||
|
|
04a749020e | ||
|
|
0d1b610dcf | ||
|
|
7bdc6519a9 | ||
|
|
84d59bb173 | ||
|
|
6513bfcfd5 | ||
|
|
0c09c0cb1b | ||
|
|
25a5adaf5e | ||
|
|
e80d231f35 | ||
|
|
7c7c6ffe60 | ||
|
|
fc6f5139c4 | ||
|
|
3f81847c94 | ||
|
|
5b38e70b61 | ||
|
|
21717dff0e | ||
|
|
c6bb94816d | ||
|
|
15f050aaff | ||
|
|
650ba77d6c | ||
|
|
b9e8d72f01 | ||
|
|
1b2268fc6a | ||
|
|
4e0a9170d9 | ||
|
|
3cc305982a | ||
|
|
d10465b73f | ||
|
|
36670ebfa4 | ||
|
|
1289f1d78a | ||
|
|
ead102d8c6 | ||
|
|
b7279d2640 | ||
|
|
e70c112f20 | ||
|
|
607844ae33 | ||
|
|
f518646c06 | ||
|
|
12d3ae6d10 | ||
|
|
9900b23eee | ||
|
|
4dc4bf84fa | ||
|
|
60ba1df934 | ||
|
|
1fc6a43e9c | ||
|
|
c5888b8f8d | ||
|
|
51b8c2303e | ||
|
|
846c3f4543 | ||
|
|
3d5b962931 | ||
|
|
a8274a8925 | ||
|
|
c850677776 | ||
|
|
44c9f44737 | ||
|
|
2ee40fc923 | ||
|
|
c8d46edd67 | ||
|
|
7d2ed8d741 | ||
|
|
a093ecb309 | ||
|
|
cefdd9aaea | ||
|
|
108e29e4a1 | ||
|
|
52bb3b8d6b | ||
|
|
24e9659c3d | ||
|
|
b676c0a743 | ||
|
|
764cfb6f1c | ||
|
|
dbb80aba03 | ||
|
|
50d47c2395 | ||
|
|
b1e3d00974 | ||
|
|
21bfd7096f | ||
|
|
e9b21036ea | ||
|
|
c567c06262 | ||
|
|
082d923f2e | ||
|
|
10eee92e1c | ||
|
|
792a08124f | ||
|
|
ea56b77b57 | ||
|
|
6d47523e15 | ||
|
|
7730ccc3cb | ||
|
|
3bef65188c | ||
|
|
e414a9e086 | ||
|
|
8573d7bd14 | ||
|
|
ac7232c8af | ||
|
|
3ac31fe810 | ||
|
|
458395931b | ||
|
|
8b001b93c8 | ||
|
|
99f5f5365b | ||
|
|
a1fc67b970 | ||
|
|
97c1929346 | ||
|
|
1d14452084 | ||
|
|
e67e8e749f | ||
|
|
a53f0d3f30 | ||
|
|
df3ccdc06a | ||
|
|
df9c5fc126 | ||
|
|
76784840a4 | ||
|
|
6fae30d245 | ||
|
|
9637ed4cfa | ||
|
|
15a033af93 | ||
|
|
11105113a9 | ||
|
|
2eb960265f | ||
|
|
d57c850ba4 | ||
|
|
0a7fc133de | ||
|
|
482f34a836 | ||
|
|
b4208f0d0a | ||
|
|
d1be8f8eff | ||
|
|
d752d162af | ||
|
|
518db8fb3f | ||
|
|
0e85e069b1 | ||
|
|
9c8616ffab | ||
|
|
e8061f6a0b | ||
|
|
65efd72683 | ||
|
|
70e79734df | ||
|
|
329e87f0eb | ||
|
|
663c975725 | ||
|
|
53bbc00327 | ||
|
|
c9c2cd23ed | ||
|
|
4418349b9e | ||
|
|
f104078cd6 | ||
|
|
78ff81de65 | ||
|
|
9c322a2fab | ||
|
|
76a0715df3 | ||
|
|
66f907eddc | ||
|
|
17f7c04065 | ||
|
|
6429ae4ab8 | ||
|
|
c93bfa6a2e | ||
|
|
6d790078a3 | ||
|
|
cdf17e128b | ||
|
|
51c2476562 | ||
|
|
fbde10887b | ||
|
|
b9263514b2 | ||
|
|
c5990c40f0 | ||
|
|
7bcc9f09ee | ||
|
|
8c2cd9c959 | ||
|
|
60b5f1e3a0 | ||
|
|
b49f0ffd3f | ||
|
|
ddb13e210d | ||
|
|
79d2dda77a | ||
|
|
54e381bfad | ||
|
|
13a9b599a5 | ||
|
|
2a66359ebd | ||
|
|
7cbf418fcc | ||
|
|
7eb7a50e41 | ||
|
|
562f463af3 | ||
|
|
771ac03c13 | ||
|
|
bf425b7dbb | ||
|
|
4dfe1953a7 | ||
|
|
d5c6a3f666 | ||
|
|
a944075616 | ||
|
|
78baadce4f | ||
|
|
d34e28ec0e | ||
|
|
4e8af93f23 | ||
|
|
122b51ad0e | ||
|
|
672b4bce6a | ||
|
|
0bcfc6a63a | ||
|
|
674f27bff8 | ||
|
|
a462b53d06 | ||
|
|
2fd9ce3774 | ||
|
|
1324cd4e58 | ||
|
|
a114380a6b | ||
|
|
00ca7aded0 | ||
|
|
cc1aa08b36 | ||
|
|
90012767a2 | ||
|
|
3259a80083 | ||
|
|
51c1889a7f | ||
|
|
67bedc108c | ||
|
|
b1d5a374f2 | ||
|
|
f295f10d00 | ||
|
|
90f8e4b5d1 | ||
|
|
9a3c0b3dbc | ||
|
|
7d93978327 | ||
|
|
89f6c5dc7b | ||
|
|
45b145847a | ||
|
|
866cff52cc | ||
|
|
a23c817256 | ||
|
|
30f4341e01 | ||
|
|
118c78ce97 | ||
|
|
de9f2f19c1 | ||
|
|
375865e548 | ||
|
|
57e09e9b47 | ||
|
|
f120638741 | ||
|
|
7c96be523c | ||
|
|
848d3b893d | ||
|
|
4443e7de5f | ||
|
|
7128591a49 | ||
|
|
d19464ce36 | ||
|
|
42cb016c47 | ||
|
|
bd9058d186 | ||
|
|
fcbe6c60be | ||
|
|
d0238045bd | ||
|
|
3f37d7ebbc | ||
|
|
ada7193f73 | ||
|
|
ad20c5efb2 | ||
|
|
36e638c262 | ||
|
|
1902b4b9e4 | ||
|
|
81963cb4c8 | ||
|
|
60b9459854 | ||
|
|
c35b3c6c3a | ||
|
|
ef50e761f8 | ||
|
|
b4804f1ef3 | ||
|
|
f6cc456483 | ||
|
|
8494a22621 | ||
|
|
0265b73a27 | ||
|
|
281e7fcfe0 | ||
|
|
76bbfb9300 | ||
|
|
4b3ee6ef58 | ||
|
|
de6058acab | ||
|
|
c5699d6bf5 | ||
|
|
ad8f2620da | ||
|
|
0e54bf206a | ||
|
|
c3b6abc321 | ||
|
|
7e37be687b | ||
|
|
2644c38743 | ||
|
|
cd2f4192d0 | ||
|
|
aac58980d8 | ||
|
|
b89fcc548c | ||
|
|
190374cdcf | ||
|
|
6b02956eb2 | ||
|
|
501973c4cf | ||
|
|
075bde44af | ||
|
|
328fcc5511 | ||
|
|
537274c6c0 | ||
|
|
db769f80a6 | ||
|
|
a732d788b7 | ||
|
|
f9ebd17d17 | ||
|
|
29bd4c9d56 | ||
|
|
2587ba6daf | ||
|
|
4070bde4ab | ||
|
|
ffceadc491 | ||
|
|
be7625a31e | ||
|
|
6b7672df9f | ||
|
|
b1c2f12c71 | ||
|
|
6895f75b2b | ||
|
|
7ccdbad0f1 | ||
|
|
a5a94769a7 | ||
|
|
bed834e9b9 | ||
|
|
5ebb1d3f03 | ||
|
|
20c240d481 | ||
|
|
a9f02a148b | ||
|
|
61924d37d9 | ||
|
|
913fd54da3 | ||
|
|
89572728bc | ||
|
|
43caffdce8 | ||
|
|
0d3ba99048 | ||
|
|
b015497d93 | ||
|
|
8b40cf597f | ||
|
|
f78e7ad99a | ||
|
|
8fb0bd245a | ||
|
|
cdfe850b47 | ||
|
|
ab6da30578 | ||
|
|
33740d1749 | ||
|
|
245786a94a | ||
|
|
5d30fa368d | ||
|
|
8bc16f1551 | ||
|
|
412ebf3220 | ||
|
|
46da33334a | ||
|
|
d27a99cdee | ||
|
|
04b689b9d2 | ||
|
|
29d0203311 | ||
|
|
af56734cde | ||
|
|
e948aea401 | ||
|
|
e89aba8d53 | ||
|
|
43948054aa | ||
|
|
024a090453 | ||
|
|
f34672d697 | ||
|
|
4416d35de1 | ||
|
|
14f18793e7 | ||
| b7f70202bd | |||
| 1aa950a521 | |||
|
|
f81e591238 | ||
|
|
c82317e2bb | ||
|
|
e38769fb1f | ||
|
|
f4ea1e7307 | ||
|
|
cc49c6c5b7 | ||
| 4581fd0b61 | |||
|
|
337e3fec87 | ||
|
|
a8d16d966f | ||
| e34561f4e7 | |||
|
|
ea03febb98 | ||
|
|
9f4ec2f3d9 | ||
|
|
90c4105c10 | ||
|
|
a340f1c175 | ||
|
|
4ac08f9bb3 | ||
|
|
346c1d129b | ||
|
|
88e54265b0 | ||
|
|
f14debcc45 | ||
|
|
35a11c917d | ||
|
|
996be3625c | ||
|
|
5b742e1161 | ||
|
|
2c29edb363 | ||
|
|
4b92e0a9a6 | ||
|
|
768b1bc5df | ||
|
|
8083deffe3 | ||
|
|
8c869af7f1 | ||
|
|
7c5ab8ec4f | ||
|
|
91e06501d3 | ||
|
|
aa06ae84c5 | ||
|
|
ba802bfaf6 | ||
|
|
496f52512a | ||
|
|
8f14716eb4 | ||
|
|
1a1b0937c2 | ||
|
|
523247b4da | ||
|
|
ba14cdf1e8 | ||
|
|
08f3424e11 | ||
|
|
a9efd0564a | ||
|
|
9fa3e6e30d | ||
|
|
2662c962f9 | ||
|
|
313c13e28c | ||
|
|
5948f3ece6 | ||
|
|
da4bece141 | ||
|
|
0c0a644225 | ||
|
|
80b72fe09d | ||
|
|
b7b6d2bc40 | ||
|
|
fc22377b28 | ||
|
|
b13d6f7b03 | ||
|
|
4078f8149d | ||
|
|
4c356113aa | ||
|
|
e617b471c4 | ||
|
|
3a23aa3c2d | ||
|
|
7c136c5494 | ||
|
|
68b5c67a16 | ||
|
|
21532f17c0 | ||
|
|
2dbc29adeb | ||
|
|
22cc8ad09e | ||
|
|
70d6add28d | ||
|
|
cc4a842281 | ||
|
|
d01168989f | ||
|
|
b518a5ea79 | ||
| c62c0aa4a9 | |||
| 8a779c5d9f | |||
| a7334e161d | |||
| 539e88f604 | |||
| ed321540ba | |||
| a94ddafb98 | |||
| e887c6ffeb | |||
| 96175d3de2 | |||
| 7774283905 | |||
| 335501ede6 | |||
| a538b42abd |
10
.gitignore
vendored
10
.gitignore
vendored
@@ -1,21 +1,25 @@
|
||||
# Virtuoso files /data/db
|
||||
/data/publication-triplestore/*
|
||||
/data/db.bck/**
|
||||
/data/db/*
|
||||
/data/db/virtuoso.ini
|
||||
!/data/db/toLoad
|
||||
!/data/db/toLoad/*
|
||||
/data/files/*
|
||||
!/data/files/exports/.gitkeep
|
||||
/data/temp/*
|
||||
docker-compose.override.yml
|
||||
.idea
|
||||
*.iml
|
||||
|
||||
/data/elasticsearch/**
|
||||
/data/ldes-feed/*
|
||||
/tmp
|
||||
.DS_STORE
|
||||
.env
|
||||
|
||||
/config/migrations/private-data/*
|
||||
/config/migrations/local/*
|
||||
|
||||
/config/proxy/nginx.htpasswd
|
||||
|
||||
@@ -25,9 +29,11 @@ DS_STORE
|
||||
/config/proxy-https/cert.pem
|
||||
/config/proxy-https/key.pem
|
||||
|
||||
# Kalliope config files
|
||||
source.json
|
||||
out.json
|
||||
security.yml
|
||||
output.json
|
||||
security.json
|
||||
|
||||
config/proxy-https/proxy_ssl.conf
|
||||
/config/search/update-handler.store
|
||||
/config/search/dev/update-handler.store
|
||||
|
||||
223
CHANGELOG.md
Normal file
223
CHANGELOG.md
Normal file
@@ -0,0 +1,223 @@
|
||||
# Changelog
|
||||
## 1.29.2 (2025-02-17)
|
||||
### Data fix
|
||||
- restore bestrokken lokale besturen that have been accidentally flushed [OP-3546]
|
||||
## 1.29.1 (2025-02-14)
|
||||
### Backend
|
||||
- re-init `worship-services-sensitive-consumer` [OP-3483]
|
||||
### Deploy notes
|
||||
:warning: Ensure first loket did a full re-sync again of this delta-stream.
|
||||
```
|
||||
drc stop worship-services-main-info-consumer worship-services-private-info-consumer
|
||||
drc retart migrations
|
||||
```
|
||||
Update `docker-compose.override.yml` to remove the config of the consumers and replace it by:
|
||||
```
|
||||
worship-services-main-info-consumer:
|
||||
environment:
|
||||
DCR_SYNC_BASE_URL: "https://loket.lblod.info" # or another endpoint
|
||||
DCR_SYNC_LOGIN_ENDPOINT: "https://loket.lblod.info/sync/worship-services-sensitive/login" # or another endpoint
|
||||
DCR_SECRET_KEY: "key-of-the-producer"
|
||||
DCR_LANDING_ZONE_DATABASE: "triplestore" # for the initial sync, we go directly to virtuoso
|
||||
DCR_REMAPPING_DATABASE: "triplestore" # for the initial sync, we go directly to virtuoso
|
||||
DCR_DISABLE_INITIAL_SYNC: "false"
|
||||
DCR_DISABLE_DELTA_INGEST: "false"
|
||||
worship-services-private-info-consumer:
|
||||
environment:
|
||||
DCR_SYNC_BASE_URL: "https://loket.lblod.info" # or another endpoint
|
||||
DCR_SYNC_LOGIN_ENDPOINT: "https://loket.lblod.info/sync/worship-services-sensitive/login" # or another endpoint
|
||||
DCR_SECRET_KEY: "key-of-the-producer"
|
||||
DCR_LANDING_ZONE_DATABASE: "triplestore" # for the initial sync, we go directly to virtuoso
|
||||
DCR_REMAPPING_DATABASE: "triplestore" # for the initial sync, we go directly to virtuoso
|
||||
DCR_DISABLE_INITIAL_SYNC: "false"
|
||||
DCR_DISABLE_DELTA_INGEST: "false"
|
||||
```
|
||||
Then
|
||||
```
|
||||
drc up -d db mandatarissen-consumer leidinggevenden-consumer worship-services-main-info-consumer worship-services-private-info-consumer
|
||||
# Wait until success of the previous step
|
||||
```
|
||||
Then, update `docker-compose.override.yml` to:
|
||||
```
|
||||
worship-services-main-info-consumer:
|
||||
environment:
|
||||
DCR_SYNC_BASE_URL: "https://loket.lblod.info" # or another endpoint
|
||||
DCR_SYNC_LOGIN_ENDPOINT: "https://loket.lblod.info/sync/worship-services-sensitive/login" # or another endpoint
|
||||
DCR_SECRET_KEY: "key-of-the-producer"
|
||||
DCR_LANDING_ZONE_DATABASE: "db"
|
||||
DCR_REMAPPING_DATABASE: "db"
|
||||
DCR_DISABLE_DELTA_INGEST: "false"
|
||||
DCR_DISABLE_INITIAL_SYNC: "false"
|
||||
worship-services-private-info-consumer:
|
||||
environment:
|
||||
DCR_SYNC_BASE_URL: "https://loket.lblod.info" # or another endpoint
|
||||
DCR_SYNC_LOGIN_ENDPOINT: "https://loket.lblod.info/sync/worship-services-sensitive/login" # or another endpoint
|
||||
DCR_SECRET_KEY: "key-of-the-producer"
|
||||
DCR_LANDING_ZONE_DATABASE: "database"
|
||||
DCR_REMAPPING_DATABASE: "database"
|
||||
DCR_DISABLE_DELTA_INGEST: "false"
|
||||
DCR_DISABLE_INITIAL_SYNC: "false"
|
||||
```
|
||||
```
|
||||
drc up -d
|
||||
sh scripts/reset-elastic.sh
|
||||
```
|
||||
|
||||
## 1.29.0 (2025-02-07)
|
||||
### Backend
|
||||
#### Consumer
|
||||
- Upgraded `mandatarissen-consumer` [OP-3510]
|
||||
- Upgraded `leidinggevenden-consumer` [OP-3533], [OP-3511]
|
||||
- Upgraded `worship-services-sensitive-consumer` [OP-3337]
|
||||
|
||||
### Deploy notes
|
||||
```
|
||||
drc down;
|
||||
```
|
||||
Update `docker-compose.override.yml` to remove the config of the consumers and replace it by:
|
||||
```
|
||||
mandatarissen-consumer:
|
||||
environment:
|
||||
DCR_SYNC_BASE_URL: "https://loket.lblod.info" # or another endpoint
|
||||
DCR_LANDING_ZONE_DATABASE: "triplestore" # for the initial sync, we go directly to virtuoso
|
||||
DCR_REMAPPING_DATABASE: "triplestore" # for the initial sync, we go directly to virtuoso
|
||||
DCR_DISABLE_DELTA_INGEST: "false"
|
||||
DCR_DISABLE_INITIAL_SYNC: "false"
|
||||
leidinggevenden-consumer:
|
||||
environment:
|
||||
DCR_SYNC_BASE_URL: "https://loket.lblod.info" # or another endpoint
|
||||
DCR_LANDING_ZONE_DATABASE: "triplestore" # for the initial sync, we go directly to virtuoso
|
||||
DCR_REMAPPING_DATABASE: "triplestore" # for the initial sync, we go directly to virtuoso
|
||||
DCR_DISABLE_DELTA_INGEST: "false"
|
||||
DCR_DISABLE_INITIAL_SYNC: "false"
|
||||
worship-services-main-info-consumer:
|
||||
environment:
|
||||
DCR_SYNC_BASE_URL: "https://loket.lblod.info" # or another endpoint
|
||||
DCR_SYNC_LOGIN_ENDPOINT: "https://loket.lblod.info/sync/worship-services-sensitive/login" # or another endpoint
|
||||
DCR_SECRET_KEY: "key-of-the-producer"
|
||||
DCR_LANDING_ZONE_DATABASE: "triplestore" # for the initial sync, we go directly to virtuoso
|
||||
DCR_REMAPPING_DATABASE: "triplestore" # for the initial sync, we go directly to virtuoso
|
||||
DCR_DISABLE_INITIAL_SYNC: "false"
|
||||
DCR_DISABLE_DELTA_INGEST: "false"
|
||||
worship-services-private-info-consumer:
|
||||
environment:
|
||||
DCR_SYNC_BASE_URL: "https://loket.lblod.info" # or another endpoint
|
||||
DCR_SYNC_LOGIN_ENDPOINT: "https://loket.lblod.info/sync/worship-services-sensitive/login" # or another endpoint
|
||||
DCR_SECRET_KEY: "key-of-the-producer"
|
||||
DCR_LANDING_ZONE_DATABASE: "triplestore" # for the initial sync, we go directly to virtuoso
|
||||
DCR_REMAPPING_DATABASE: "triplestore" # for the initial sync, we go directly to virtuoso
|
||||
DCR_DISABLE_INITIAL_SYNC: "false"
|
||||
DCR_DISABLE_DELTA_INGEST: "false"
|
||||
```
|
||||
Then:
|
||||
```
|
||||
drc up -d triplestore migrations
|
||||
drc up -d db mandatarissen-consumer leidinggevenden-consumer worship-services-main-info-consumer worship-services-private-info-consumer
|
||||
# Wait until success of the previous step
|
||||
```
|
||||
Then, update `docker-compose.override.yml` to:
|
||||
```
|
||||
mandatarissen-consumer:
|
||||
environment:
|
||||
DCR_SYNC_BASE_URL: "https://loket.lblod.info" # or another endpoint
|
||||
DCR_LANDING_ZONE_DATABASE: "db"
|
||||
DCR_REMAPPING_DATABASE: "db"
|
||||
DCR_DISABLE_DELTA_INGEST: "false"
|
||||
DCR_DISABLE_INITIAL_SYNC: "false"
|
||||
leidinggevenden-consumer:
|
||||
environment:
|
||||
DCR_SYNC_BASE_URL: "https://loket.lblod.info" # choose the correct endpoint
|
||||
DCR_LANDING_ZONE_DATABASE: "db"
|
||||
DCR_REMAPPING_DATABASE: "db"
|
||||
DCR_DISABLE_DELTA_INGEST: "false"
|
||||
DCR_DISABLE_INITIAL_SYNC: "false"
|
||||
worship-services-main-info-consumer:
|
||||
environment:
|
||||
DCR_SYNC_BASE_URL: "https://loket.lblod.info" # or another endpoint
|
||||
DCR_SYNC_LOGIN_ENDPOINT: "https://loket.lblod.info/sync/worship-services-sensitive/login" # or another endpoint
|
||||
DCR_SECRET_KEY: "key-of-the-producer"
|
||||
DCR_LANDING_ZONE_DATABASE: "db"
|
||||
DCR_REMAPPING_DATABASE: "db"
|
||||
DCR_DISABLE_DELTA_INGEST: "false"
|
||||
DCR_DISABLE_INITIAL_SYNC: "false"
|
||||
worship-services-private-info-consumer:
|
||||
environment:
|
||||
DCR_SYNC_BASE_URL: "https://loket.lblod.info" # or another endpoint
|
||||
DCR_SYNC_LOGIN_ENDPOINT: "https://loket.lblod.info/sync/worship-services-sensitive/login" # or another endpoint
|
||||
DCR_SECRET_KEY: "key-of-the-producer"
|
||||
DCR_LANDING_ZONE_DATABASE: "database"
|
||||
DCR_REMAPPING_DATABASE: "database"
|
||||
DCR_DISABLE_DELTA_INGEST: "false"
|
||||
DCR_DISABLE_INITIAL_SYNC: "false"
|
||||
```
|
||||
```
|
||||
drc up -d
|
||||
sh scripts/reset-elastic.sh
|
||||
```
|
||||
|
||||
## 1.28.5 (2025-01-23)
|
||||
### Frontend
|
||||
- Bump to [v1.28.3](https://github.com/lblod/frontend-organization-portal/releases/tag/v1.28.3)
|
||||
### Backend
|
||||
- Datafix: correct merger change events for worship organisations (OP-3534)
|
||||
- Avoid municipality filter to include partial matches (OP-3509)
|
||||
### Deploy notes
|
||||
- `drc restart migrations-triggering-indexing; drc logs -ft --tail=200 migrations-triggering-indexing`
|
||||
- `drc pull frontend; drc up -d frontend`
|
||||
- Perform a full re-index by executing `./scripts/reset-elastic.sh`
|
||||
|
||||
## 1.28.4 (2025-01-16)
|
||||
### Backend
|
||||
#### Data
|
||||
- Performance fix on 1.28.3 [DL-6377]
|
||||
### Deploy commands
|
||||
```
|
||||
drc restart migrations
|
||||
drc exec delta-producer-background-jobs-initiator curl -X POST http://localhost/public/healing-jobs # or wait for the healing to kick in
|
||||
```
|
||||
## 1.28.3 (2025-01-16)
|
||||
### Backend
|
||||
#### Data
|
||||
- Datafix. Fusiegemeentes had different bestuursfuncties attached to OCMW and Gemeente. [DL-6377]
|
||||
However, business-rule-wise, these bestuursfuncties are shared.
|
||||
### Deploy commands
|
||||
```
|
||||
drc restart migrations
|
||||
drc exec delta-producer-background-jobs-initiator curl -X POST http://localhost/public/healing-jobs # or wait for the healing to kick in
|
||||
```
|
||||
## 1.28.2 (2025-01-13)
|
||||
### Backend
|
||||
- Added "Opdrachthoudende vereniging met private deelname" in delta public (DL-6368)
|
||||
### Deploy commands
|
||||
```
|
||||
drc restart migrations
|
||||
drc exec delta-producer-background-jobs-initiator curl -X POST http://localhost/public/healing-jobs # or wait for the healing to kick in
|
||||
```
|
||||
## 1.28.1 (2025-01-11)
|
||||
### Backend
|
||||
- Import 2025 NIS codes and update werkingsgebieden (OP-3342)
|
||||
- Add merger change events for merged police zones (OP-3454)
|
||||
- Delete local involvements for worship services (OP-3501, OP-3512)
|
||||
- Move link between new municipalities and province to shared graph (OP-3513, OP-3514)
|
||||
|
||||
### Deploy notes
|
||||
- Restart both migration services
|
||||
#### Docker commands
|
||||
- `drc restart migrations; drc logs -ft --tail=200 migrations`
|
||||
- `drc restart migrations-triggering-indexing; drc logs -ft --tail=200 migrations-triggering-indexing`
|
||||
|
||||
## 1.28.0 (2025-01-02)
|
||||
### Backend
|
||||
- Bump frontend to `v1.28.0`
|
||||
- Add end date for governing bodies for municipalities and OCMWs and update status (OP-3348)
|
||||
- Update municipality and province name in organisation's addresses (OP-3410)
|
||||
- Add merger change events for merged municipalities and OCMWs (OP-3412)
|
||||
- Updates names for merged municipalities and OCMWs (OP-3456)
|
||||
|
||||
### Deploy notes
|
||||
- Restart both migration services
|
||||
- Bump frontend
|
||||
#### Docker commands
|
||||
- `drc restart migrations; drc logs -ft --tail=200 migrations`
|
||||
- `drc restart migrations-triggering-indexing; drc logs -ft --tail=200 migrations-triggering-indexing`
|
||||
- `drc pull frontend; drc up -d frontend`
|
||||
139
README.md
139
README.md
@@ -11,6 +11,145 @@ Backend for the organization portal application, based on the mu.semte.ch micros
|
||||
|
||||
You can shut down using `docker-compose stop` and remove everything using `docker-compose rm`.
|
||||
|
||||
#### Setup consumers
|
||||
|
||||
The application depends on external data. You'll have to perform extra steps if you want this data to be available.
|
||||
These are multiple data sets, we'll try to be exhaustive on how to ingest these. Even though the procedures are similar.
|
||||
|
||||
#### Setup mandatarissen sync
|
||||
Note: this is assuming you have never ran this before.
|
||||
```
|
||||
drc down;
|
||||
```
|
||||
Update `docker-compose.override.yml` to:
|
||||
```
|
||||
mandatarissen-consumer:
|
||||
environment:
|
||||
DCR_SYNC_BASE_URL: "https://loket.lokaalbestuur.vlaanderen.be" # or another endpoint
|
||||
DCR_LANDING_ZONE_DATABASE: "triplestore"
|
||||
DCR_REMAPPING_DATABASE: "triplestore"
|
||||
DCR_DISABLE_DELTA_INGEST: "false"
|
||||
DCR_DISABLE_INITIAL_SYNC: "false"
|
||||
```
|
||||
Then:
|
||||
```
|
||||
drc up -d migrations
|
||||
drc up -d db mandatarissen-consumer
|
||||
# Wait until success of the previous step
|
||||
```
|
||||
Then, update `docker-compose.override.yml` to:
|
||||
```
|
||||
mandatarissen-consumer:
|
||||
environment:
|
||||
DCR_SYNC_BASE_URL: "https://loket.lokaalbestuur.vlaanderen.be" # or another endpoint
|
||||
DCR_LANDING_ZONE_DATABASE: "db"
|
||||
DCR_REMAPPING_DATABASE: "db"
|
||||
DCR_DISABLE_DELTA_INGEST: "false"
|
||||
DCR_DISABLE_INITIAL_SYNC: "false"
|
||||
```
|
||||
Finally, put the stack back up and reindex elasticsearch
|
||||
```
|
||||
drc up -d
|
||||
sh scripts/reset-elastic.sh
|
||||
```
|
||||
|
||||
#### Setup leidinggevenden sync (http://data.lblod.info/vocabularies/leidinggevenden/Functionaris)
|
||||
|
||||
Note: this is assuming you have never ran this before.
|
||||
```
|
||||
drc down;
|
||||
```
|
||||
Update `docker-compose.override.yml` to:
|
||||
```
|
||||
leidinggevenden-consumer:
|
||||
environment:
|
||||
DCR_SYNC_BASE_URL: "https://loket.lokaalbestuur.vlaanderen.be" # or another endpoint
|
||||
DCR_LANDING_ZONE_DATABASE: "triplestore" # for the initial sync, we go directly to virtuoso
|
||||
DCR_REMAPPING_DATABASE: "triplestore" # for the initial sync, we go directly to virtuoso
|
||||
DCR_DISABLE_DELTA_INGEST: "false"
|
||||
DCR_DISABLE_INITIAL_SYNC: "false"
|
||||
```
|
||||
Then:
|
||||
```
|
||||
drc up -d migrations
|
||||
drc up -d db leidinggevenden-consumer
|
||||
# Wait until success of the previous step
|
||||
```
|
||||
Then, update `docker-compose.override.yml` to:
|
||||
```
|
||||
leidinggevenden-consumer:
|
||||
environment:
|
||||
DCR_SYNC_BASE_URL: "https://loket.lokaalbestuur.vlaanderen.be" # choose the correct endpoint
|
||||
DCR_LANDING_ZONE_DATABASE: "db"
|
||||
DCR_REMAPPING_DATABASE: "db"
|
||||
DCR_DISABLE_DELTA_INGEST: "false"
|
||||
DCR_DISABLE_INITIAL_SYNC: "false"
|
||||
```
|
||||
Finally, put the stack back up and reindex elasticsearch
|
||||
```
|
||||
drc up -d
|
||||
sh scripts/reset-elastic.sh
|
||||
```
|
||||
|
||||
#### Setup worship mandatees sync
|
||||
|
||||
Note: this is assuming you have never ran this before.
|
||||
```
|
||||
drc down;
|
||||
```
|
||||
Update `docker-compose.override.yml` to:
|
||||
```
|
||||
worship-services-main-info-consumer:
|
||||
environment:
|
||||
DCR_SYNC_BASE_URL: "https://loket.lokaalbestuur.vlaanderen.be" # or another endpoint
|
||||
DCR_SYNC_LOGIN_ENDPOINT: "https://loket.lokaalbestuur.vlaanderen.be/sync/worship-services-sensitive/login" # or another endpoint
|
||||
DCR_SECRET_KEY: "key-of-the-producer"
|
||||
DCR_LANDING_ZONE_DATABASE: "triplestore"
|
||||
DCR_REMAPPING_DATABASE: "triplestore"
|
||||
DCR_DISABLE_DELTA_INGEST: "false"
|
||||
DCR_DISABLE_INITIAL_SYNC: "false"
|
||||
worship-services-private-info-consumer:
|
||||
environment:
|
||||
DCR_SYNC_BASE_URL: "https://loket.lokaalbestuur.vlaanderen.be" # or another endpoint
|
||||
DCR_SYNC_LOGIN_ENDPOINT: "https://loket.lokaalbestuur.vlaanderen.be/sync/worship-services-sensitive/login" # or another endpoint
|
||||
DCR_SECRET_KEY: "key-of-the-producer"
|
||||
DCR_LANDING_ZONE_DATABASE: "triplestore"
|
||||
DCR_REMAPPING_DATABASE: "triplestore"
|
||||
DCR_DISABLE_DELTA_INGEST: "false"
|
||||
DCR_DISABLE_INITIAL_SYNC: "false"
|
||||
```
|
||||
Then:
|
||||
```
|
||||
drc up -d migrations
|
||||
drc up -d db worship-services-main-info-consumer worship-services-private-info-consumer
|
||||
# Wait until success of the previous step
|
||||
```
|
||||
Then, update `docker-compose.override.yml` to:
|
||||
```
|
||||
worship-services-main-info-consumer:
|
||||
environment:
|
||||
DCR_SYNC_BASE_URL: "https://loket.lokaalbestuur.vlaanderen.be" # or another endpoint
|
||||
DCR_SYNC_LOGIN_ENDPOINT: "https://loket.lokaalbestuur.vlaanderen.be/sync/worship-services-sensitive/login" # or another endpoint
|
||||
DCR_SECRET_KEY: "key-of-the-producer"
|
||||
DCR_LANDING_ZONE_DATABASE: "db"
|
||||
DCR_REMAPPING_DATABASE: "db"
|
||||
DCR_DISABLE_DELTA_INGEST: "false"
|
||||
DCR_DISABLE_INITIAL_SYNC: "false"
|
||||
worship-services-private-info-consumer:
|
||||
environment:
|
||||
DCR_SYNC_BASE_URL: "https://loket.lokaalbestuur.vlaanderen.be" # or another endpoint
|
||||
DCR_SYNC_LOGIN_ENDPOINT: "https://loket.lokaalbestuur.vlaanderen.be/sync/worship-services-sensitive/login" # or another endpoint
|
||||
DCR_SECRET_KEY: "key-of-the-producer"
|
||||
DCR_LANDING_ZONE_DATABASE: "db"
|
||||
DCR_REMAPPING_DATABASE: "db"
|
||||
DCR_DISABLE_DELTA_INGEST: "false"
|
||||
DCR_DISABLE_INITIAL_SYNC: "false"
|
||||
```
|
||||
Finally, put the stack back up and reindex elasticsearch
|
||||
```
|
||||
drc up -d
|
||||
sh scripts/reset-elastic.sh
|
||||
```
|
||||
|
||||
### Setting up the delta-producers related services
|
||||
To make sure the app can share data, producers need to be set up. There is an intial sync, that is potentially very expensive, and must be started manually
|
||||
|
||||
@@ -7,91 +7,95 @@ alias Acl.GroupSpec, as: GroupSpec
|
||||
alias Acl.GroupSpec.GraphCleanup, as: GraphCleanup
|
||||
|
||||
defmodule Acl.UserGroups.Config do
|
||||
|
||||
@error_type [
|
||||
"https://docs.oasis-open-projects.org/oslc-op/core/v3.0/os/core-vocab.html#Error"
|
||||
]
|
||||
|
||||
@worship_type [
|
||||
"http://data.lblod.info/vocabularies/erediensten/EredienstMandataris",
|
||||
"http://data.lblod.info/vocabularies/erediensten/BestuurVanDeEredienst",
|
||||
"http://data.lblod.info/vocabularies/erediensten/EredienstBestuurseenheid",
|
||||
"http://data.lblod.info/vocabularies/erediensten/RolBedienaar",
|
||||
"http://data.lblod.info/vocabularies/erediensten/VoorwaardenBedienaar",
|
||||
"http://data.lblod.info/vocabularies/erediensten/PositieBedienaar",
|
||||
"http://data.lblod.info/vocabularies/erediensten/BetrokkenLokaleBesturen",
|
||||
"http://data.lblod.info/vocabularies/erediensten/VerbondenJuridischeStructuren",
|
||||
"http://data.lblod.info/vocabularies/erediensten/CentraalBestuurVanDeEredienst",
|
||||
"http://data.lblod.info/vocabularies/erediensten/RepresentatiefOrgaan",
|
||||
"http://data.lblod.info/vocabularies/erediensten/EredienstMandataris",
|
||||
"http://data.lblod.info/vocabularies/erediensten/BestuurVanDeEredienst",
|
||||
"http://data.lblod.info/vocabularies/erediensten/EredienstBestuurseenheid",
|
||||
"http://data.lblod.info/vocabularies/erediensten/RolBedienaar",
|
||||
"http://data.lblod.info/vocabularies/erediensten/VoorwaardenBedienaar",
|
||||
"http://data.lblod.info/vocabularies/erediensten/PositieBedienaar",
|
||||
"http://data.lblod.info/vocabularies/erediensten/BetrokkenLokaleBesturen",
|
||||
"http://data.lblod.info/vocabularies/erediensten/VerbondenJuridischeStructuren",
|
||||
"http://data.lblod.info/vocabularies/erediensten/CentraalBestuurVanDeEredienst",
|
||||
"http://data.lblod.info/vocabularies/erediensten/RepresentatiefOrgaan"
|
||||
]
|
||||
|
||||
@public_type [
|
||||
"http://www.w3.org/ns/org#Role",
|
||||
"http://data.vlaanderen.be/ns/besluit#Bestuurseenheid",
|
||||
"http://xmlns.com/foaf/0.1/Person",
|
||||
"http://xmlns.com/foaf/0.1/OnlineAccount",
|
||||
"http://www.semanticdesktop.org/ontologies/2007/03/22/nfo#FileDataObject",
|
||||
"http://www.w3.org/ns/dcat#Dataset",
|
||||
"http://www.w3.org/ns/dcat#Distribution",
|
||||
"http://www.w3.org/ns/dcat#Catalog",
|
||||
"http://mu.semte.ch/vocabularies/ext/GeslachtCode",
|
||||
"http://data.lblod.info/vocabularies/leidinggevenden/FunctionarisStatusCode",
|
||||
"http://lblod.data.gift/vocabularies/organisatie/OrganisatieStatusCode",
|
||||
"http://lblod.data.gift/vocabularies/organisatie/BestuursfunctieCode",
|
||||
"http://lblod.data.gift/vocabularies/organisatie/BestuursorgaanClassificatieCode",
|
||||
"http://lblod.data.gift/vocabularies/organisatie/MandatarisStatusCode",
|
||||
"http://lblod.data.gift/vocabularies/organisatie/BestuurseenheidClassificatieCode",
|
||||
"http://lblod.data.gift/vocabularies/organisatie/TypeEredienst",
|
||||
"http://www.w3.org/2004/02/skos/core#ConceptScheme",
|
||||
"http://lblod.data.gift/vocabularies/organisatie/BedienaarFinanceringCode",
|
||||
"http://www.w3.org/2004/02/skos/core#Concept",
|
||||
"http://publications.europa.eu/ontology/euvoc#Country",
|
||||
"http://lblod.data.gift/vocabularies/organisatie/TypeVestiging",
|
||||
"http://lblod.data.gift/vocabularies/organisatie/HelftVerkiezing",
|
||||
"http://lblod.data.gift/vocabularies/organisatie/Veranderingsgebeurtenis",
|
||||
"http://lblod.data.gift/vocabularies/organisatie/TypeBetrokkenheid",
|
||||
"http://lblod.data.gift/vocabularies/organisatie/VoorwaardenBedienaarCriterium",
|
||||
"http://lblod.data.gift/vocabularies/organisatie/BedienaarCriteriumBewijsstuk",
|
||||
"http://lblod.data.gift/vocabularies/organisatie/EredienstBeroepen",
|
||||
"http://lblod.data.gift/vocabularies/organisatie/Rechtsvormtype"
|
||||
"http://www.w3.org/ns/org#Role",
|
||||
"http://data.vlaanderen.be/ns/besluit#Bestuurseenheid",
|
||||
"http://xmlns.com/foaf/0.1/Person",
|
||||
"http://xmlns.com/foaf/0.1/OnlineAccount",
|
||||
"http://www.semanticdesktop.org/ontologies/2007/03/22/nfo#FileDataObject",
|
||||
"http://www.w3.org/ns/dcat#Dataset",
|
||||
"http://www.w3.org/ns/dcat#Distribution",
|
||||
"http://www.w3.org/ns/dcat#Catalog",
|
||||
"http://mu.semte.ch/vocabularies/ext/GeslachtCode",
|
||||
"http://data.lblod.info/vocabularies/leidinggevenden/FunctionarisStatusCode",
|
||||
"http://lblod.data.gift/vocabularies/organisatie/OrganisatieStatusCode",
|
||||
"http://lblod.data.gift/vocabularies/organisatie/BestuursfunctieCode",
|
||||
"http://lblod.data.gift/vocabularies/organisatie/BestuursorgaanClassificatieCode",
|
||||
"http://lblod.data.gift/vocabularies/organisatie/MandatarisStatusCode",
|
||||
"http://lblod.data.gift/vocabularies/organisatie/BestuurseenheidClassificatieCode",
|
||||
"http://mu.semte.ch/vocabularies/ext/GeregistreerdeOrganisatieClassificatieCode",
|
||||
"http://lblod.data.gift/vocabularies/organisatie/TypeEredienst",
|
||||
"http://www.w3.org/2004/02/skos/core#ConceptScheme",
|
||||
"http://lblod.data.gift/vocabularies/organisatie/BedienaarFinancieringCode",
|
||||
"http://www.w3.org/2004/02/skos/core#Concept",
|
||||
"http://publications.europa.eu/ontology/euvoc#Country",
|
||||
"http://lblod.data.gift/vocabularies/organisatie/TypeVestiging",
|
||||
"http://lblod.data.gift/vocabularies/organisatie/HelftVerkiezing",
|
||||
"http://lblod.data.gift/vocabularies/organisatie/Veranderingsgebeurtenis",
|
||||
"http://lblod.data.gift/vocabularies/organisatie/TypeBetrokkenheid",
|
||||
"http://lblod.data.gift/vocabularies/organisatie/VoorwaardenBedienaarCriterium",
|
||||
"http://lblod.data.gift/vocabularies/organisatie/BedienaarCriteriumBewijsstuk",
|
||||
"http://lblod.data.gift/vocabularies/organisatie/EredienstBeroepen",
|
||||
"http://lblod.data.gift/vocabularies/organisatie/Rechtsvormtype"
|
||||
]
|
||||
|
||||
@org_type [
|
||||
"http://www.w3.org/ns/org#Organization",
|
||||
"http://data.vlaanderen.be/ns/besluit#Besluit",
|
||||
"https://data.vlaanderen.be/ns/besluitvorming#Beslissingsactiviteit",
|
||||
"http://www.w3.org/ns/org#Site",
|
||||
"http://www.w3.org/ns/locn#Address",
|
||||
"http://www.w3.org/ns/person#Person",
|
||||
"http://schema.org/ContactPoint",
|
||||
"http://data.vlaanderen.be/ns/besluit#Bestuurseenheid",
|
||||
"http://data.vlaanderen.be/ns/besluit#Bestuursorgaan",
|
||||
"http://www.w3.org/ns/adms#Identifier",
|
||||
"https://data.vlaanderen.be/ns/generiek#GestructureerdeIdentificator",
|
||||
"http://data.vlaanderen.be/ns/mandaat#Mandaat",
|
||||
"http://data.vlaanderen.be/ns/mandaat#Mandataris",
|
||||
"http://data.lblod.info/vocabularies/leidinggevenden/Functionaris",
|
||||
"http://data.lblod.info/vocabularies/leidinggevenden/Bestuursfunctie",
|
||||
"http://lblod.data.gift/vocabularies/organisatie/VeranderingsgebeurtenisResultaat",
|
||||
"http://www.w3.org/ns/org#Post",
|
||||
"http://www.w3.org/ns/org#ChangeEvent",
|
||||
"http://data.lblod.info/vocabularies/contacthub/AgentInPositie"
|
||||
"http://purl.org/dc/terms/Agent",
|
||||
"http://www.w3.org/ns/org#Organization",
|
||||
"http://www.w3.org/ns/regorg#RegisteredOrganization",
|
||||
"http://data.vlaanderen.be/ns/besluit#Besluit",
|
||||
"https://data.vlaanderen.be/ns/besluitvorming#Beslissingsactiviteit",
|
||||
"http://www.w3.org/ns/org#Site",
|
||||
"http://www.w3.org/ns/locn#Address",
|
||||
"http://www.w3.org/ns/person#Person",
|
||||
"http://schema.org/ContactPoint",
|
||||
"http://data.vlaanderen.be/ns/besluit#Bestuurseenheid",
|
||||
"http://data.vlaanderen.be/ns/besluit#Bestuursorgaan",
|
||||
"http://www.w3.org/ns/adms#Identifier",
|
||||
"https://data.vlaanderen.be/ns/generiek#GestructureerdeIdentificator",
|
||||
"http://data.vlaanderen.be/ns/mandaat#Mandaat",
|
||||
"http://data.vlaanderen.be/ns/mandaat#Mandataris",
|
||||
"http://data.lblod.info/vocabularies/leidinggevenden/Functionaris",
|
||||
"http://data.lblod.info/vocabularies/leidinggevenden/Bestuursfunctie",
|
||||
"http://lblod.data.gift/vocabularies/organisatie/VeranderingsgebeurtenisResultaat",
|
||||
"http://www.w3.org/ns/org#Post",
|
||||
"http://www.w3.org/ns/org#ChangeEvent",
|
||||
"http://data.lblod.info/vocabularies/contacthub/AgentInPositie",
|
||||
"http://mu.semte.ch/vocabularies/ext/KboOrganisatie",
|
||||
]
|
||||
|
||||
@shared_protected_type [
|
||||
"http://www.w3.org/ns/prov#Location",
|
||||
"http://xmlns.com/foaf/0.1/Image",
|
||||
"http://www.semanticdesktop.org/ontologies/2007/03/22/nfo#FileDataObject"
|
||||
"http://www.w3.org/ns/prov#Location",
|
||||
"http://xmlns.com/foaf/0.1/Image",
|
||||
"http://www.semanticdesktop.org/ontologies/2007/03/22/nfo#FileDataObject"
|
||||
]
|
||||
|
||||
defp access_by_role( group_string ) do
|
||||
defp access_by_role(group_string) do
|
||||
%AccessByQuery{
|
||||
# vars: ["session_group","session_role"], todo we might have to create multiple graph depending on role
|
||||
# vars: ["session_group","session_role"], todo we might have to create multiple graph depending on role
|
||||
vars: [],
|
||||
query: sparql_query_for_access_role( group_string ) }
|
||||
query: sparql_query_for_access_role(group_string)
|
||||
}
|
||||
end
|
||||
|
||||
defp sparql_query_for_access_role( group_string ) do
|
||||
defp sparql_query_for_access_role(group_string) do
|
||||
"PREFIX ext: <http://mu.semte.ch/vocabularies/ext/>
|
||||
PREFIX mu: <http://mu.semte.ch/vocabularies/core/>
|
||||
SELECT distinct ?session_group ?session_role WHERE {
|
||||
@@ -103,11 +107,10 @@ defmodule Acl.UserGroups.Config do
|
||||
|
||||
def user_groups do
|
||||
[
|
||||
|
||||
%GroupSpec{
|
||||
name: "acmidm-lezer",
|
||||
useage: [:read],
|
||||
access: access_by_role( "ABBOrganisatiePortaalGebruiker-lezer" ),
|
||||
access: access_by_role("ABBOrganisatiePortaalGebruiker-lezer"),
|
||||
graphs: [
|
||||
%GraphSpec{
|
||||
graph: "http://mu.semte.ch/graphs/administrative-unit",
|
||||
@@ -120,7 +123,7 @@ defmodule Acl.UserGroups.Config do
|
||||
%GroupSpec{
|
||||
name: "acmidm-editeerder",
|
||||
useage: [:read, :write, :read_for_write],
|
||||
access: access_by_role( "ABBOrganisatiePortaalGebruiker-editeerder" ),
|
||||
access: access_by_role("ABBOrganisatiePortaalGebruiker-editeerder"),
|
||||
graphs: [
|
||||
%GraphSpec{
|
||||
graph: "http://mu.semte.ch/graphs/administrative-unit",
|
||||
@@ -133,7 +136,7 @@ defmodule Acl.UserGroups.Config do
|
||||
%GroupSpec{
|
||||
name: "acmidm-beheerder",
|
||||
useage: [:read, :write, :read_for_write],
|
||||
access: access_by_role( "ABBOrganisatiePortaalGebruiker-beheerder" ),
|
||||
access: access_by_role("ABBOrganisatiePortaalGebruiker-beheerder"),
|
||||
graphs: [
|
||||
%GraphSpec{
|
||||
graph: "http://mu.semte.ch/graphs/administrative-unit",
|
||||
@@ -146,7 +149,7 @@ defmodule Acl.UserGroups.Config do
|
||||
%GroupSpec{
|
||||
name: "acmidm-worship-lezer",
|
||||
useage: [:read],
|
||||
access: access_by_role( "ABBOrganisatiePortaalErediensten-lezer" ),
|
||||
access: access_by_role("ABBOrganisatiePortaalErediensten-lezer"),
|
||||
graphs: [
|
||||
%GraphSpec{
|
||||
graph: "http://mu.semte.ch/graphs/worship-service",
|
||||
@@ -159,7 +162,7 @@ defmodule Acl.UserGroups.Config do
|
||||
%GroupSpec{
|
||||
name: "acmidm-worship-editeerder",
|
||||
useage: [:read, :write, :read_for_write],
|
||||
access: access_by_role( "ABBOrganisatiePortaalErediensten-editeerder" ),
|
||||
access: access_by_role("ABBOrganisatiePortaalErediensten-editeerder"),
|
||||
graphs: [
|
||||
%GraphSpec{
|
||||
graph: "http://mu.semte.ch/graphs/worship-service",
|
||||
@@ -172,7 +175,7 @@ defmodule Acl.UserGroups.Config do
|
||||
%GroupSpec{
|
||||
name: "acmidm-worship-beheerder",
|
||||
useage: [:read, :write, :read_for_write],
|
||||
access: access_by_role( "ABBOrganisatiePortaalErediensten-beheerder" ),
|
||||
access: access_by_role("ABBOrganisatiePortaalErediensten-beheerder"),
|
||||
graphs: [
|
||||
%GraphSpec{
|
||||
graph: "http://mu.semte.ch/graphs/worship-service",
|
||||
@@ -188,10 +191,10 @@ defmodule Acl.UserGroups.Config do
|
||||
access: %AlwaysAccessible{},
|
||||
graphs: [
|
||||
%GraphSpec{
|
||||
graph: "http://mu.semte.ch/graphs/public",
|
||||
constraint: %ResourceConstraint{
|
||||
resource_types: @public_type
|
||||
}
|
||||
graph: "http://mu.semte.ch/graphs/public",
|
||||
constraint: %ResourceConstraint{
|
||||
resource_types: @public_type
|
||||
}
|
||||
},
|
||||
%GraphSpec{
|
||||
graph: "http://mu.semte.ch/graphs/shared",
|
||||
@@ -199,8 +202,8 @@ defmodule Acl.UserGroups.Config do
|
||||
resource_types: @shared_protected_type ++ @org_type
|
||||
}
|
||||
}
|
||||
|
||||
]},
|
||||
]
|
||||
},
|
||||
|
||||
# // CLEANUP
|
||||
#
|
||||
|
||||
@@ -1,19 +1,18 @@
|
||||
const BATCH_SIZE = parseInt(process.env.BATCH_SIZE) || 100;
|
||||
const BATCH_SIZE = parseInt(process.env.BATCH_SIZE) || 1000;
|
||||
const MU_CALL_SCOPE_ID_INITIAL_SYNC = process.env.MU_CALL_SCOPE_ID_INITIAL_SYNC || 'http://redpencil.data.gift/id/concept/muScope/deltas/consumer/initialSync';
|
||||
const BYPASS_MU_AUTH_FOR_EXPENSIVE_QUERIES = process.env.BYPASS_MU_AUTH_FOR_EXPENSIVE_QUERIES == 'true' ? true : false;
|
||||
const DIRECT_DATABASE_ENDPOINT = process.env.DIRECT_DATABASE_ENDPOINT || 'http://triplestore:8890/sparql';
|
||||
const DIRECT_DATABASE_ENDPOINT = process.env.DIRECT_DATABASE_ENDPOINT || 'http://virtuoso:8890/sparql';
|
||||
const MAX_DB_RETRY_ATTEMPTS = parseInt(process.env.MAX_DB_RETRY_ATTEMPTS || 5);
|
||||
const MAX_REASONING_RETRY_ATTEMPTS = parseInt(process.env.MAX_REASONING_RETRY_ATTEMPTS || 5);
|
||||
const SLEEP_BETWEEN_BATCHES = parseInt(process.env.SLEEP_BETWEEN_BATCHES || 1000);
|
||||
const SLEEP_BETWEEN_BATCHES = parseInt(process.env.SLEEP_BETWEEN_BATCHES || 100);
|
||||
const SLEEP_TIME_AFTER_FAILED_REASONING_OPERATION = parseInt(process.env.SLEEP_TIME_AFTER_FAILED_REASONING_OPERATION || 10000);
|
||||
const SLEEP_TIME_AFTER_FAILED_DB_OPERATION = parseInt(process.env.SLEEP_TIME_AFTER_FAILED_DB_OPERATION || 60000);
|
||||
|
||||
// Graphs
|
||||
const TARGET_GRAPH = process.env.TARGET_GRAPH || `http://mu.semte.ch/graphs/administrative-unit`;
|
||||
const LANDING_ZONE_GRAPH = process.env.DCR_LANDING_ZONE_GRAPH || `http://mu.semte.ch/graphs/landing-zone/leidinggevenden`;
|
||||
const LANDING_ZONE_GRAPH = process.env.DCR_LANDING_ZONE_GRAPH || `http://mu.semte.ch/graphs/landing-zone/clb-contact-data`;
|
||||
|
||||
// ENDPOINTS
|
||||
const LANDING_ZONE_DATABASE = process.env.DCR_LANDING_ZONE_DATABASE || 'db';
|
||||
const LANDING_ZONE_DATABASE = process.env.DCR_LANDING_ZONE_DATABASE || 'database';
|
||||
const LANDING_ZONE_DATABASE_ENDPOINT = process.env.DCR_LANDING_ZONE_DATABASE_ENDPOINT || `http://${LANDING_ZONE_DATABASE}:8890/sparql`;
|
||||
|
||||
module.exports = {
|
||||
@@ -27,6 +26,5 @@ module.exports = {
|
||||
SLEEP_TIME_AFTER_FAILED_DB_OPERATION,
|
||||
SLEEP_TIME_AFTER_FAILED_REASONING_OPERATION,
|
||||
LANDING_ZONE_GRAPH,
|
||||
TARGET_GRAPH,
|
||||
LANDING_ZONE_DATABASE_ENDPOINT
|
||||
};
|
||||
};
|
||||
268
config/clb-consumer/contact-data/delta-context-config.js
Normal file
268
config/clb-consumer/contact-data/delta-context-config.js
Normal file
@@ -0,0 +1,268 @@
|
||||
|
||||
const PREFIXES = `
|
||||
PREFIX besluit: <http://data.vlaanderen.be/ns/besluit#>
|
||||
PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
|
||||
PREFIX lblodgeneriek: <https://data.lblod.info/vocabularies/generiek/>
|
||||
PREFIX org: <http://www.w3.org/ns/org#>
|
||||
PREFIX code: <http://lblod.data.gift/vocabularies/organisatie/>
|
||||
PREFIX adms: <http://www.w3.org/ns/adms#>
|
||||
PREFIX generiek: <https://data.vlaanderen.be/ns/generiek#>
|
||||
PREFIX ere: <http://data.lblod.info/vocabularies/erediensten/>
|
||||
PREFIX organisatie: <https://data.vlaanderen.be/ns/organisatie#>
|
||||
PREFIX mu: <http://mu.semte.ch/vocabularies/core/>
|
||||
PREFIX euvoc: <http://publications.europa.eu/ontology/euvoc#>
|
||||
PREFIX prov: <http://www.w3.org/ns/prov#>
|
||||
PREFIX schema: <http://schema.org/>
|
||||
PREFIX locn: <http://www.w3.org/ns/locn#>
|
||||
PREFIX ext: <http://mu.semte.ch/vocabularies/ext/>`
|
||||
|
||||
const contextConfig = {
|
||||
addTypes: {
|
||||
scope: 'all', // 'inserts, 'deletes', 'all' or none. To add rdf:type to subjects of inserts, deletes or both
|
||||
exhausitive: false, // true or false: find all types for a subject, even if one is already present in delta
|
||||
},
|
||||
contextQueries: [
|
||||
{
|
||||
trigger: { // subjectType or predicateValue
|
||||
subjectType: "org:Site"
|
||||
},
|
||||
queryTemplate: (subject) => `
|
||||
${PREFIXES}
|
||||
CONSTRUCT {
|
||||
${subject} ext:goesInGraph ?graphOne.
|
||||
${subject} ext:goesInGraph ?graphTwo.
|
||||
${subject} ext:goesInGraph ?graphThree.
|
||||
${subject} ext:goesInGraph ?graphFour.
|
||||
} WHERE {
|
||||
OPTIONAL {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?adminUnitOne org:hasPrimarySite ${subject}.
|
||||
}
|
||||
BIND(<http://mu.semte.ch/graphs/administrative-unit> AS ?graphOne)
|
||||
}
|
||||
OPTIONAL {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?adminUnitTwo org:hasSite ${subject}.
|
||||
}
|
||||
BIND(<http://mu.semte.ch/graphs/administrative-unit> AS ?graphTwo)
|
||||
}
|
||||
OPTIONAL {
|
||||
GRAPH <http://mu.semte.ch/graphs/worship-service> {
|
||||
?adminUnitThree org:hasPrimarySite ${subject}.
|
||||
}
|
||||
BIND(<http://mu.semte.ch/graphs/worship-service> AS ?graphThree)
|
||||
}
|
||||
OPTIONAL {
|
||||
GRAPH <http://mu.semte.ch/graphs/worship-service> {
|
||||
?adminUnitFour org:hasSite ${subject}.
|
||||
}
|
||||
BIND(<http://mu.semte.ch/graphs/worship-service> AS ?graphFour)
|
||||
}
|
||||
}`
|
||||
},
|
||||
{
|
||||
trigger: { // subjectType or predicateValue
|
||||
subjectType: "schema:ContactPoint"
|
||||
},
|
||||
queryTemplate: (subject) => `
|
||||
${PREFIXES}
|
||||
CONSTRUCT {
|
||||
${subject} ext:goesInGraph ?graphOne.
|
||||
${subject} ext:goesInGraph ?graphTwo.
|
||||
} WHERE {
|
||||
OPTIONAL {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?siteOne org:siteAddress ${subject}.
|
||||
}
|
||||
BIND(<http://mu.semte.ch/graphs/administrative-unit> AS ?graphOne)
|
||||
}
|
||||
OPTIONAL {
|
||||
GRAPH <http://mu.semte.ch/graphs/worship-service> {
|
||||
?siteTwo org:siteAddress ${subject}.
|
||||
}
|
||||
BIND(<http://mu.semte.ch/graphs/worship-service> AS ?graphTwo)
|
||||
}
|
||||
}`
|
||||
},
|
||||
{
|
||||
trigger: { // subjectType or predicateValue
|
||||
subjectType: "locn:Address"
|
||||
},
|
||||
queryTemplate: (subject) => `
|
||||
${PREFIXES}
|
||||
CONSTRUCT {
|
||||
${subject} ext:goesInGraph ?graphOne.
|
||||
${subject} ext:goesInGraph ?graphTwo.
|
||||
} WHERE {
|
||||
OPTIONAL {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?siteOne organisatie:bestaatUit ${subject}.
|
||||
}
|
||||
BIND(<http://mu.semte.ch/graphs/administrative-unit> AS ?graphOne)
|
||||
}
|
||||
OPTIONAL {
|
||||
GRAPH <http://mu.semte.ch/graphs/worship-service> {
|
||||
?siteTwo organisatie:bestaatUit ${subject}.
|
||||
}
|
||||
BIND(<http://mu.semte.ch/graphs/worship-service> AS ?graphTwo)
|
||||
}
|
||||
}`
|
||||
},
|
||||
//Predicate triggers to solve out of order deltas
|
||||
{
|
||||
trigger: { // subjectType or predicateValue
|
||||
predicateValue: "org:hasSite"
|
||||
},
|
||||
//We assume that only administrative units are in the shared graph of OP due to the need of sharing the prefLabel with worships services
|
||||
queryTemplate: (subject) => `
|
||||
${PREFIXES}
|
||||
CONSTRUCT {
|
||||
${subject} ext:goesInGraph ?graphOne.
|
||||
${subject} ext:goesInGraph ?graphTwo.
|
||||
?site ?pSite ?oSite.
|
||||
?contact ?pContact ?oContact.
|
||||
?address ?pAddress ?oAddress.
|
||||
?addressContact ?pAddressContact ?oAddressContact.
|
||||
} WHERE {
|
||||
OPTIONAL {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
${subject} a ?type.
|
||||
}
|
||||
BIND(<http://mu.semte.ch/graphs/administrative-unit> AS ?graphOne)
|
||||
}
|
||||
OPTIONAL {
|
||||
GRAPH <http://mu.semte.ch/graphs/shared> {
|
||||
${subject} a ?type.
|
||||
}
|
||||
BIND(<http://mu.semte.ch/graphs/administrative-unit> AS ?graphOne)
|
||||
}
|
||||
OPTIONAL {
|
||||
GRAPH <http://mu.semte.ch/graphs/worship-service> {
|
||||
${subject} a ?type.
|
||||
}
|
||||
BIND(<http://mu.semte.ch/graphs/worship-service> AS ?graphTwo)
|
||||
}
|
||||
${subject} org:hasSite ?site.
|
||||
?site ?pSite ?oSite.
|
||||
{
|
||||
?site org:siteAddress ?contact.
|
||||
?contact ?pContact ?oContact.
|
||||
?contact locn:address ?addressContact.
|
||||
?addressContact ?pAddressContact ?oAddressContact.
|
||||
}
|
||||
UNION
|
||||
{
|
||||
?site org:siteAddress ?contact.
|
||||
?contact ?pContact ?oContact.
|
||||
}
|
||||
UNION
|
||||
{
|
||||
?site organisatie:bestaatUit ?address.
|
||||
?address ?pAddress ?oAddress.
|
||||
}
|
||||
}`
|
||||
},
|
||||
{
|
||||
trigger: { // subjectType or predicateValue
|
||||
predicateValue: "org:hasPrimarySite"
|
||||
},
|
||||
//We assume that only administrative units are in the shared graph of OP due to the need of sharing the prefLabel with worships services
|
||||
queryTemplate: (subject) => `
|
||||
${PREFIXES}
|
||||
CONSTRUCT {
|
||||
${subject} ext:goesInGraph ?graphOne.
|
||||
${subject} ext:goesInGraph ?graphTwo.
|
||||
?site ?pSite ?oSite.
|
||||
?contact ?pContact ?oContact.
|
||||
?address ?pAddress ?oAddress.
|
||||
?addressContact ?pAddressContact ?oAddressContact.
|
||||
} WHERE {
|
||||
OPTIONAL {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
${subject} a ?type.
|
||||
}
|
||||
BIND(<http://mu.semte.ch/graphs/administrative-unit> AS ?graphOne)
|
||||
}
|
||||
OPTIONAL {
|
||||
GRAPH <http://mu.semte.ch/graphs/shared> {
|
||||
${subject} a ?type.
|
||||
}
|
||||
BIND(<http://mu.semte.ch/graphs/administrative-unit> AS ?graphOne)
|
||||
}
|
||||
OPTIONAL {
|
||||
GRAPH <http://mu.semte.ch/graphs/worship-service> {
|
||||
${subject} a ?type.
|
||||
}
|
||||
BIND(<http://mu.semte.ch/graphs/worship-service> AS ?graphTwo)
|
||||
}
|
||||
${subject} org:hasPrimarySite ?site.
|
||||
?site ?pSite ?oSite.
|
||||
{
|
||||
?site org:siteAddress ?contact.
|
||||
?contact ?pContact ?oContact.
|
||||
?contact locn:address ?addressContact.
|
||||
?addressContact ?pAddressContact ?oAddressContact.
|
||||
}
|
||||
UNION
|
||||
{
|
||||
?site org:siteAddress ?contact.
|
||||
?contact ?pContact ?oContact.
|
||||
}
|
||||
UNION
|
||||
{
|
||||
?site organisatie:bestaatUit ?address.
|
||||
?address ?pAddress ?oAddress.
|
||||
}
|
||||
}`
|
||||
},
|
||||
{
|
||||
trigger: { // subjectType or predicateValue
|
||||
predicateValue: "org:siteAddress"
|
||||
},
|
||||
queryTemplate: (subject) => `
|
||||
${PREFIXES}
|
||||
CONSTRUCT {
|
||||
?contact ?pContact ?oContact.
|
||||
?addressContact ?pAddressContact ?oAddressContact.
|
||||
} WHERE {
|
||||
${subject} org:siteAddress ?contact.
|
||||
?contact ?pContact ?oContact.
|
||||
OPTIONAL {
|
||||
?contact locn:address ?addressContact.
|
||||
?addressContact ?pAddressContact ?oAddressContact.
|
||||
}
|
||||
}`
|
||||
},
|
||||
{
|
||||
trigger: { // subjectType or predicateValue
|
||||
predicateValue: "locn:address"
|
||||
},
|
||||
queryTemplate: (subject) => `
|
||||
${PREFIXES}
|
||||
CONSTRUCT {
|
||||
?addressContact ?pAddressContact ?oAddressContact.
|
||||
} WHERE {
|
||||
${subject} locn:address ?addressContact.
|
||||
?addressContact ?pAddressContact ?oAddressContact.
|
||||
}`
|
||||
},
|
||||
{
|
||||
trigger: { // subjectType or predicateValue
|
||||
predicateValue: "organisatie:bestaatUit"
|
||||
},
|
||||
queryTemplate: (subject) => `
|
||||
${PREFIXES}
|
||||
CONSTRUCT {
|
||||
?address ?pAddress ?oAddress.
|
||||
} WHERE {
|
||||
${subject} organisatie:bestaatUit ?address.
|
||||
?address ?pAddress ?oAddress.
|
||||
}`
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
contextConfig,
|
||||
PREFIXES
|
||||
};
|
||||
104
config/clb-consumer/contact-data/delta-sync-dispatching.js
Normal file
104
config/clb-consumer/contact-data/delta-sync-dispatching.js
Normal file
@@ -0,0 +1,104 @@
|
||||
const {
|
||||
deleteFromPublicGraph,
|
||||
insertIntoPublicGraph,
|
||||
deleteFromSpecificGraphs,
|
||||
insertIntoSpecificGraphs
|
||||
} = require('./util');
|
||||
|
||||
const {
|
||||
LANDING_ZONE_GRAPH
|
||||
} = require('./config')
|
||||
|
||||
const publicTypes = [
|
||||
'<http://lblod.data.gift/vocabularies/organisatie/TypeVestiging>'
|
||||
]
|
||||
|
||||
/**
|
||||
* Dispatch the fetched information to a target graph.
|
||||
* Note: <share://file/data> will be ADDED to it's own graph.
|
||||
* We take only care of adding them, not updating triples, this is a TODO
|
||||
* @param { mu, muAuthSudo } lib - The provided libraries from the host service.
|
||||
* @param { termObjectChangeSets: { deletes, inserts } } data - The fetched changes sets, which objects of serialized Terms
|
||||
* [ {
|
||||
* graph: "<http://foo>",
|
||||
* subject: "<http://bar>",
|
||||
* predicate: "<http://baz>",
|
||||
* object: "<http://boom>^^<http://datatype>"
|
||||
* }
|
||||
* ]
|
||||
* @return {void} Nothing
|
||||
*/
|
||||
async function dispatch(lib, data) {
|
||||
let { termObjectChangeSets, termObjectChangeSetsWithContext } = data;
|
||||
|
||||
// Both arrays are the same length, so we can zip them together for easier processing
|
||||
zippedChangeSets = termObjectChangeSets.map((o, i) => ({
|
||||
original: o,
|
||||
withContext: termObjectChangeSetsWithContext && termObjectChangeSetsWithContext[i]
|
||||
}));
|
||||
|
||||
console.log(`Received ${zippedChangeSets.length} change sets`)
|
||||
|
||||
for (let { original, withContext } of zippedChangeSets) {
|
||||
|
||||
const {public: insertsOnPublic, target: insertsOnGraphs} = separateBetweenTargetAndPublic(original.inserts, withContext.inserts)
|
||||
const {public: deletesOnPublic, target: deletesOnGraphs} = separateBetweenTargetAndPublic(original.deletes, withContext.deletes)
|
||||
|
||||
await deleteFromPublicGraph(lib, deletesOnPublic);
|
||||
await deleteFromSpecificGraphs(lib, deletesOnGraphs);
|
||||
await insertIntoPublicGraph(lib, insertsOnPublic);
|
||||
await insertIntoSpecificGraphs(lib, insertsOnGraphs);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
function separateBetweenTargetAndPublic(changes, context) {
|
||||
const changesOnPublic = new Set();
|
||||
const changesOnGraphs = {};
|
||||
for(let change of changes) {
|
||||
const subject = change.subject;
|
||||
const contextTriples = context.filter((context) => context.subject === subject);
|
||||
const graphTriple = contextTriples.find(
|
||||
(context) => context.predicate === '<http://mu.semte.ch/vocabularies/ext/goesInGraph>'
|
||||
&& context.object !== `<${LANDING_ZONE_GRAPH}>`
|
||||
)
|
||||
const otherContextTriples = context.filter(
|
||||
(context) => context.predicate !== '<http://mu.semte.ch/vocabularies/ext/goesInGraph>'
|
||||
&& context.predicate !== '<http://mu.semte.ch/vocabularies/ext/contextDataGoesInGraph>'
|
||||
&& !(context.subject === subject && context.predicate === '<http://www.w3.org/1999/02/22-rdf-syntax-ns#type>')
|
||||
);
|
||||
if(graphTriple) {
|
||||
const graph = graphTriple.object.slice(1,-1); // We have to slice it to remove the "<" and ">"
|
||||
if(change.object !== '') {
|
||||
if(!changesOnGraphs[graph]) {
|
||||
changesOnGraphs[graph] = new Set();
|
||||
}
|
||||
changesOnGraphs[graph].add(`${change.subject} ${change.predicate} ${change.object}.`)
|
||||
}
|
||||
for(let triple of otherContextTriples) {
|
||||
if(triple.object === '') continue;
|
||||
if(!changesOnGraphs[graph]) {
|
||||
changesOnGraphs[graph] = new Set();
|
||||
}
|
||||
changesOnGraphs[graph].add(`${triple.subject} ${triple.predicate} ${triple.object}.`)
|
||||
}
|
||||
}
|
||||
const typeTriple = contextTriples.find(
|
||||
(context) => context.subject === subject
|
||||
&& context.predicate === '<http://www.w3.org/1999/02/22-rdf-syntax-ns#type>'
|
||||
);
|
||||
if(!typeTriple) continue;
|
||||
const type = typeTriple.object;
|
||||
if(publicTypes.includes(type)) {
|
||||
changesOnPublic.add(`${change.subject} ${change.predicate} ${change.object}.`)
|
||||
for(let triple of otherContextTriples) {
|
||||
changesOnPublic.add(`${triple.subject} ${triple.predicate} ${triple.object}.`)
|
||||
}
|
||||
}
|
||||
}
|
||||
return {public: changesOnPublic, target: changesOnGraphs}
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
dispatch
|
||||
};
|
||||
@@ -1,4 +1,4 @@
|
||||
const { batchedDbUpdate, transformLandingZoneGraph } = require('./util');
|
||||
const { batchedDbUpdate, moveDataAfterInitialSync } = require('./util');
|
||||
const {
|
||||
BYPASS_MU_AUTH_FOR_EXPENSIVE_QUERIES,
|
||||
DIRECT_DATABASE_ENDPOINT,
|
||||
@@ -7,9 +7,7 @@ const {
|
||||
MAX_DB_RETRY_ATTEMPTS,
|
||||
SLEEP_BETWEEN_BATCHES,
|
||||
SLEEP_TIME_AFTER_FAILED_DB_OPERATION,
|
||||
TARGET_GRAPH,
|
||||
LANDING_ZONE_GRAPH,
|
||||
LANDING_ZONE_DATABASE_ENDPOINT
|
||||
} = require('./config');
|
||||
|
||||
const endpoint = BYPASS_MU_AUTH_FOR_EXPENSIVE_QUERIES ? DIRECT_DATABASE_ENDPOINT : process.env.MU_SPARQL_ENDPOINT;
|
||||
@@ -32,7 +30,7 @@ async function dispatch(lib, data) {
|
||||
const { termObjects } = data;
|
||||
|
||||
// Steps:
|
||||
// 1. Write the triples to the landing zone graph - withouth any mapping or filtering
|
||||
// 1. Write the triples to the landing zone graph - without any mapping or filtering
|
||||
// 2. One-time reasoning run with the full landing zone graph and write the results to the target graph (on-finish)
|
||||
|
||||
if (BYPASS_MU_AUTH_FOR_EXPENSIVE_QUERIES) {
|
||||
@@ -48,7 +46,7 @@ async function dispatch(lib, data) {
|
||||
LANDING_ZONE_GRAPH,
|
||||
originalInsertTriples,
|
||||
{ 'mu-call-scope-id': MU_CALL_SCOPE_ID_INITIAL_SYNC },
|
||||
LANDING_ZONE_DATABASE_ENDPOINT,
|
||||
endpoint,
|
||||
BATCH_SIZE,
|
||||
MAX_DB_RETRY_ATTEMPTS,
|
||||
SLEEP_BETWEEN_BATCHES,
|
||||
@@ -57,29 +55,15 @@ async function dispatch(lib, data) {
|
||||
}
|
||||
}
|
||||
|
||||
async function onFinishInitialIngest(lib) {
|
||||
const { muAuthSudo, fetch } = lib;
|
||||
async function onFinishInitialIngest(lib,data) {
|
||||
const { muAuthSudo } = lib;
|
||||
|
||||
console.log(`!! On-finish triggered !!`);
|
||||
|
||||
const transformedInsertTriples = await transformLandingZoneGraph(fetch, endpoint);
|
||||
|
||||
console.log(`Transformed ${transformedInsertTriples.length} triples`);
|
||||
|
||||
await batchedDbUpdate(
|
||||
muAuthSudo.updateSudo,
|
||||
TARGET_GRAPH,
|
||||
transformedInsertTriples,
|
||||
{ 'mu-call-scope-id': MU_CALL_SCOPE_ID_INITIAL_SYNC },
|
||||
endpoint,
|
||||
BATCH_SIZE,
|
||||
MAX_DB_RETRY_ATTEMPTS,
|
||||
SLEEP_BETWEEN_BATCHES,
|
||||
SLEEP_TIME_AFTER_FAILED_DB_OPERATION
|
||||
);
|
||||
await moveDataAfterInitialSync(muAuthSudo.updateSudo, endpoint)
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
dispatch,
|
||||
onFinishInitialIngest
|
||||
};
|
||||
};
|
||||
337
config/clb-consumer/contact-data/util.js
Normal file
337
config/clb-consumer/contact-data/util.js
Normal file
@@ -0,0 +1,337 @@
|
||||
const {
|
||||
MAX_DB_RETRY_ATTEMPTS,
|
||||
SLEEP_BETWEEN_BATCHES,
|
||||
SLEEP_TIME_AFTER_FAILED_DB_OPERATION,
|
||||
LANDING_ZONE_GRAPH,
|
||||
BATCH_SIZE,
|
||||
} = require('./config');
|
||||
|
||||
const prefixes = `
|
||||
PREFIX besluit: <http://data.vlaanderen.be/ns/besluit#>
|
||||
PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
|
||||
PREFIX lblodgeneriek: <https://data.lblod.info/vocabularies/generiek/>
|
||||
PREFIX org: <http://www.w3.org/ns/org#>
|
||||
PREFIX code: <http://lblod.data.gift/vocabularies/organisatie/>
|
||||
PREFIX adms: <http://www.w3.org/ns/adms#>
|
||||
PREFIX generiek: <https://data.vlaanderen.be/ns/generiek#>
|
||||
PREFIX ere: <http://data.lblod.info/vocabularies/erediensten/>
|
||||
PREFIX organisatie: <https://data.vlaanderen.be/ns/organisatie#>
|
||||
PREFIX mu: <http://mu.semte.ch/vocabularies/core/>
|
||||
PREFIX euvoc: <http://publications.europa.eu/ontology/euvoc#>
|
||||
PREFIX prov: <http://www.w3.org/ns/prov#>
|
||||
PREFIX schema: <http://schema.org/>
|
||||
PREFIX locn: <http://www.w3.org/ns/locn#>
|
||||
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
|
||||
PREFIX ext:<http://mu.semte.ch/vocabularies/ext/>
|
||||
`
|
||||
|
||||
async function batchedDbUpdate(
|
||||
muUpdate,
|
||||
graph,
|
||||
triples,
|
||||
extraHeaders,
|
||||
endpoint,
|
||||
batchSize,
|
||||
maxAttempts,
|
||||
sleepBetweenBatches = 1000,
|
||||
sleepTimeOnFail = 1000,
|
||||
operation = 'INSERT'
|
||||
) {
|
||||
for (let i = 0; i < triples.length; i += batchSize) {
|
||||
console.log(`Inserting triples in batch: ${i}-${i + batchSize}`);
|
||||
|
||||
const batch = triples.slice(i, i + batchSize).join('\n');
|
||||
|
||||
const insertCall = async () => {
|
||||
await muUpdate(`
|
||||
${operation} DATA {
|
||||
GRAPH <${graph}> {
|
||||
${batch}
|
||||
}
|
||||
}
|
||||
`, extraHeaders, endpoint);
|
||||
};
|
||||
|
||||
await operationWithRetry(insertCall, 0, maxAttempts, sleepTimeOnFail);
|
||||
|
||||
console.log(`Sleeping before next query execution: ${sleepBetweenBatches}`);
|
||||
await new Promise(r => setTimeout(r, sleepBetweenBatches));
|
||||
}
|
||||
}
|
||||
|
||||
async function operationWithRetry(callback,
|
||||
attempt,
|
||||
maxAttempts,
|
||||
sleepTimeOnFail) {
|
||||
try {
|
||||
if (typeof callback === "function")
|
||||
return await callback();
|
||||
else // Catch error from promise - not how I would do it normally, but allows re use of existing code.
|
||||
return await callback;
|
||||
}
|
||||
catch (e) {
|
||||
console.log(`Operation failed for ${callback.toString()}, attempt: ${attempt} of ${maxAttempts}`);
|
||||
console.log(`Error: ${e}`);
|
||||
console.log(`Sleeping ${sleepTimeOnFail} ms`);
|
||||
|
||||
if (attempt >= maxAttempts) {
|
||||
console.log(`Max attempts reached for ${callback.toString()}, giving up`);
|
||||
throw e;
|
||||
}
|
||||
|
||||
await new Promise(r => setTimeout(r, sleepTimeOnFail));
|
||||
return operationWithRetry(callback, ++attempt, maxAttempts, sleepTimeOnFail);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
async function insertIntoPublicGraph(lib, statements) {
|
||||
console.log(`Inserting ${statements.length} statements into public graph`);
|
||||
|
||||
await batchedDbUpdate(
|
||||
lib.muAuthSudo.updateSudo,
|
||||
'http://mu.semte.ch/graphs/public',
|
||||
Array.from(statements),
|
||||
{},
|
||||
process.env.MU_SPARQL_ENDPOINT,
|
||||
BATCH_SIZE,
|
||||
MAX_DB_RETRY_ATTEMPTS,
|
||||
SLEEP_BETWEEN_BATCHES,
|
||||
SLEEP_TIME_AFTER_FAILED_DB_OPERATION,
|
||||
'INSERT');
|
||||
}
|
||||
|
||||
async function insertIntoSpecificGraphs(lib, statementsWithGraphs) {
|
||||
|
||||
for( let graph in statementsWithGraphs) {
|
||||
console.log(`Inserting ${statementsWithGraphs[graph].length} statements into ${graph} graph`);
|
||||
await batchedDbUpdate(
|
||||
lib.muAuthSudo.updateSudo,
|
||||
graph,
|
||||
Array.from(statementsWithGraphs[graph]),
|
||||
{},
|
||||
process.env.MU_SPARQL_ENDPOINT,
|
||||
BATCH_SIZE,
|
||||
MAX_DB_RETRY_ATTEMPTS,
|
||||
SLEEP_BETWEEN_BATCHES,
|
||||
SLEEP_TIME_AFTER_FAILED_DB_OPERATION,
|
||||
'INSERT');
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
async function deleteFromPublicGraph(lib, statements) {
|
||||
console.log(`Deleting ${statements.length} statements from public graph`);
|
||||
|
||||
await batchedDbUpdate(
|
||||
lib.muAuthSudo.updateSudo,
|
||||
'http://mu.semte.ch/graphs/public',
|
||||
Array.from(statements),
|
||||
{},
|
||||
process.env.MU_SPARQL_ENDPOINT,
|
||||
BATCH_SIZE,
|
||||
MAX_DB_RETRY_ATTEMPTS,
|
||||
SLEEP_BETWEEN_BATCHES,
|
||||
SLEEP_TIME_AFTER_FAILED_DB_OPERATION,
|
||||
'DELETE');
|
||||
}
|
||||
|
||||
async function deleteFromSpecificGraphs(lib, statementsWithGraphs) {
|
||||
|
||||
|
||||
for( let graph in statementsWithGraphs) {
|
||||
console.log(`Deleting ${statementsWithGraphs[graph].length} statements from ${graph} graph`);
|
||||
await batchedDbUpdate(
|
||||
lib.muAuthSudo.updateSudo,
|
||||
graph,
|
||||
Array.from(statementsWithGraphs[graph]),
|
||||
{},
|
||||
process.env.MU_SPARQL_ENDPOINT,
|
||||
BATCH_SIZE,
|
||||
MAX_DB_RETRY_ATTEMPTS,
|
||||
SLEEP_BETWEEN_BATCHES,
|
||||
SLEEP_TIME_AFTER_FAILED_DB_OPERATION,
|
||||
'DELETE');
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
async function moveDataAfterInitialSync(muUpdate, endpoint) {
|
||||
// Move primary sites admin units
|
||||
await muUpdate(`
|
||||
${prefixes}
|
||||
INSERT {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?adminUnit org:hasPrimarySite ?site.
|
||||
?site ?pSite ?oSite.
|
||||
?contact ?pContact ?oContact.
|
||||
?address ?pAddress ?oAddress.
|
||||
?addressContact ?pAddressContact ?oAddressContact.
|
||||
}
|
||||
} WHERE {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?adminUnit a ?type.
|
||||
}
|
||||
GRAPH <${LANDING_ZONE_GRAPH}> {
|
||||
?adminUnit org:hasPrimarySite ?site.
|
||||
?site ?pSite ?oSite.
|
||||
{
|
||||
?site org:siteAddress ?contact.
|
||||
?contact ?pContact ?oContact.
|
||||
?contact locn:address ?addressContact.
|
||||
?addressContact ?pAddressContact ?oAddressContact.
|
||||
}
|
||||
UNION
|
||||
{
|
||||
?site org:siteAddress ?contact.
|
||||
?contact ?pContact ?oContact.
|
||||
}
|
||||
UNION
|
||||
{
|
||||
?site organisatie:bestaatUit ?address.
|
||||
?address ?pAddress ?oAddress.
|
||||
}
|
||||
}
|
||||
}
|
||||
`, undefined, endpoint)
|
||||
|
||||
// Move sites administrative units
|
||||
await muUpdate(`
|
||||
${prefixes}
|
||||
INSERT {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?adminUnit org:hasSite ?site.
|
||||
?site ?pSite ?oSite.
|
||||
?contact ?pContact ?oContact.
|
||||
?address ?pAddress ?oAddress.
|
||||
?addressContact ?pAddressContact ?oAddressContact.
|
||||
}
|
||||
} WHERE {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?adminUnit a ?type.
|
||||
}
|
||||
GRAPH <${LANDING_ZONE_GRAPH}> {
|
||||
?adminUnit org:hasSite ?site.
|
||||
?site ?pSite ?oSite.
|
||||
{
|
||||
?site org:siteAddress ?contact.
|
||||
?contact ?pContact ?oContact.
|
||||
?contact locn:address ?addressContact.
|
||||
?addressContact ?pAddressContact ?oAddressContact.
|
||||
}
|
||||
UNION
|
||||
{
|
||||
?site org:siteAddress ?contact.
|
||||
?contact ?pContact ?oContact.
|
||||
}
|
||||
UNION
|
||||
{
|
||||
?site organisatie:bestaatUit ?address.
|
||||
?address ?pAddress ?oAddress.
|
||||
}
|
||||
}
|
||||
}
|
||||
`, undefined, endpoint)
|
||||
|
||||
// Move primary sites worships
|
||||
await muUpdate(`
|
||||
${prefixes}
|
||||
INSERT {
|
||||
GRAPH <http://mu.semte.ch/graphs/worship-service> {
|
||||
?adminUnit org:hasPrimarySite ?site.
|
||||
?site ?pSite ?oSite.
|
||||
?contact ?pContact ?oContact.
|
||||
?address ?pAddress ?oAddress.
|
||||
?addressContact ?pAddressContact ?oAddressContact.
|
||||
}
|
||||
} WHERE {
|
||||
GRAPH <http://mu.semte.ch/graphs/worship-service> {
|
||||
?adminUnit a ?type.
|
||||
}
|
||||
GRAPH <${LANDING_ZONE_GRAPH}> {
|
||||
?adminUnit org:hasPrimarySite ?site.
|
||||
?site ?pSite ?oSite.
|
||||
{
|
||||
?site org:siteAddress ?contact.
|
||||
?contact ?pContact ?oContact.
|
||||
?contact locn:address ?addressContact.
|
||||
?addressContact ?pAddressContact ?oAddressContact.
|
||||
}
|
||||
UNION
|
||||
{
|
||||
?site org:siteAddress ?contact.
|
||||
?contact ?pContact ?oContact.
|
||||
}
|
||||
UNION
|
||||
{
|
||||
?site organisatie:bestaatUit ?address.
|
||||
?address ?pAddress ?oAddress.
|
||||
}
|
||||
}
|
||||
}
|
||||
`, undefined, endpoint)
|
||||
|
||||
// Move sites worships
|
||||
await muUpdate(`
|
||||
${prefixes}
|
||||
INSERT {
|
||||
GRAPH <http://mu.semte.ch/graphs/worship-service> {
|
||||
?adminUnit org:hasSite ?site.
|
||||
?site ?pSite ?oSite.
|
||||
?contact ?pContact ?oContact.
|
||||
?address ?pAddress ?oAddress.
|
||||
?addressContact ?pAddressContact ?oAddressContact.
|
||||
}
|
||||
} WHERE {
|
||||
GRAPH <http://mu.semte.ch/graphs/worship-service> {
|
||||
?adminUnit a ?type.
|
||||
}
|
||||
GRAPH <${LANDING_ZONE_GRAPH}> {
|
||||
?adminUnit org:hasSite ?site.
|
||||
?site ?pSite ?oSite.
|
||||
{
|
||||
?site org:siteAddress ?contact.
|
||||
?contact ?pContact ?oContact.
|
||||
?contact locn:address ?addressContact.
|
||||
?addressContact ?pAddressContact ?oAddressContact.
|
||||
}
|
||||
UNION
|
||||
{
|
||||
?site org:siteAddress ?contact.
|
||||
?contact ?pContact ?oContact.
|
||||
}
|
||||
UNION
|
||||
{
|
||||
?site organisatie:bestaatUit ?address.
|
||||
?address ?pAddress ?oAddress.
|
||||
}
|
||||
}
|
||||
}
|
||||
`, undefined, endpoint)
|
||||
|
||||
// Move sites worships
|
||||
await muUpdate(`
|
||||
${prefixes}
|
||||
INSERT {
|
||||
GRAPH <http://mu.semte.ch/graphs/public> {
|
||||
?type a <http://lblod.data.gift/vocabularies/organisatie/TypeVestiging>.
|
||||
?type ?a ?b.
|
||||
}
|
||||
} WHERE {
|
||||
GRAPH <${LANDING_ZONE_GRAPH}> {
|
||||
?type a <http://lblod.data.gift/vocabularies/organisatie/TypeVestiging>.
|
||||
?type ?a ?b.
|
||||
}
|
||||
}
|
||||
`, undefined, endpoint)
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
batchedDbUpdate,
|
||||
moveDataAfterInitialSync,
|
||||
insertIntoPublicGraph,
|
||||
deleteFromPublicGraph,
|
||||
insertIntoSpecificGraphs,
|
||||
deleteFromSpecificGraphs,
|
||||
};
|
||||
42
config/delta-producer/background-job-initiator/config.json
Normal file
42
config/delta-producer/background-job-initiator/config.json
Normal file
@@ -0,0 +1,42 @@
|
||||
[
|
||||
{
|
||||
"name": "organizations",
|
||||
"jobsGraph": "http://mu.semte.ch/graphs/jobs",
|
||||
"dumpFileCreationJobOperation": "http://redpencil.data.gift/id/jobs/concept/JobOperation/deltas/deltaDumpFileCreation/organizations",
|
||||
"initialPublicationGraphSyncJobOperation": "http://redpencil.data.gift/id/jobs/concept/JobOperation/deltas/initialPublicationGraphSyncing/organizations",
|
||||
"healingJobOperation": "http://redpencil.data.gift/id/jobs/concept/JobOperation/deltas/healingOperation/organizations",
|
||||
"cronPatternDumpJob": "42 * * * *",
|
||||
"cronPatternHealingJob": "0 0 4 * * *",
|
||||
"startInitialSync": true
|
||||
},
|
||||
{
|
||||
"name": "public",
|
||||
"jobsGraph": "http://mu.semte.ch/graphs/jobs",
|
||||
"dumpFileCreationJobOperation": "http://redpencil.data.gift/id/jobs/concept/JobOperation/deltas/deltaDumpFileCreation/public",
|
||||
"initialPublicationGraphSyncJobOperation": "http://redpencil.data.gift/id/jobs/concept/JobOperation/deltas/initialPublicationGraphSyncing/public",
|
||||
"healingJobOperation": "http://redpencil.data.gift/id/jobs/concept/JobOperation/deltas/healingOperation/public",
|
||||
"cronPatternDumpJob": "11 */4 * * *",
|
||||
"cronPatternHealingJob": "0 0 4 * * *",
|
||||
"startInitialSync": true
|
||||
},
|
||||
{
|
||||
"name": "organizations-public-info",
|
||||
"jobsGraph": "http://mu.semte.ch/graphs/jobs",
|
||||
"dumpFileCreationJobOperation": "http://redpencil.data.gift/id/jobs/concept/JobOperation/deltas/deltaDumpFileCreation/organizations-public-info",
|
||||
"initialPublicationGraphSyncJobOperation": "http://redpencil.data.gift/id/jobs/concept/JobOperation/deltas/initialPublicationGraphSyncing/organizations-public-info",
|
||||
"healingJobOperation": "http://redpencil.data.gift/id/jobs/concept/JobOperation/deltas/healingOperation/organizations-public-info",
|
||||
"cronPatternDumpJob": "27 */4 * * *",
|
||||
"cronPatternHealingJob": "0 0 4 * * *",
|
||||
"startInitialSync": true
|
||||
},
|
||||
{
|
||||
"name": "worship-posts",
|
||||
"jobsGraph": "http://mu.semte.ch/graphs/jobs",
|
||||
"dumpFileCreationJobOperation": "http://redpencil.data.gift/id/jobs/concept/JobOperation/deltas/deltaDumpFileCreation/worship-posts",
|
||||
"initialPublicationGraphSyncJobOperation": "http://redpencil.data.gift/id/jobs/concept/JobOperation/deltas/initialPublicationGraphSyncing/worship-posts",
|
||||
"healingJobOperation": "http://redpencil.data.gift/id/jobs/concept/JobOperation/deltas/healingOperation/worship-posts",
|
||||
"cronPatternDumpJob": "17 */4 * * *",
|
||||
"cronPatternHealingJob": "0 0 3 * * *",
|
||||
"startInitialSync": true
|
||||
}
|
||||
]
|
||||
@@ -3,6 +3,7 @@
|
||||
"dcatDataSetSubject": "http://data.lblod.info/datasets/delta-producer/dumps/OrganizationsCacheGraphDump",
|
||||
"targetGraph": "http://redpencil.data.gift/id/deltas/producer/organizations",
|
||||
"fileBaseName": "dump-organizations",
|
||||
"publicationGraphEndpoint": "http://publication-triplestore:8890/sparql",
|
||||
"targetDcatGraph": "http://redpencil.data.gift/id/deltas/producer/organizations-deltas",
|
||||
"targetFilesGraph": "http://redpencil.data.gift/id/deltas/producer/organizations-deltas",
|
||||
"cleanupOldDumps": true
|
||||
@@ -11,14 +12,34 @@
|
||||
"dcatDataSetSubject": "http://data.lblod.info/datasets/delta-producer/dumps/OrganizationsCacheGraphDump",
|
||||
"targetGraph": "http://redpencil.data.gift/id/deltas/producer/organizations",
|
||||
"fileBaseName": "dump-organizations",
|
||||
"publicationGraphEndpoint": "http://publication-triplestore:8890/sparql",
|
||||
"targetDcatGraph": "http://redpencil.data.gift/id/deltas/producer/organizations-deltas",
|
||||
"targetFilesGraph": "http://redpencil.data.gift/id/deltas/producer/organizations-deltas",
|
||||
"cleanupOldDumps": true
|
||||
},
|
||||
"http://redpencil.data.gift/id/jobs/concept/JobOperation/deltas/deltaDumpFileCreation/organizations-public-info": {
|
||||
"dcatDataSetSubject": "http://data.lblod.info/datasets/delta-producer/dumps/OrganizationsPublicInfoCacheGraphDump",
|
||||
"targetGraph": "http://redpencil.data.gift/id/deltas/producer/organizations-public-info",
|
||||
"fileBaseName": "dump-organizations-public-info",
|
||||
"publicationGraphEndpoint": "http://publication-triplestore:8890/sparql",
|
||||
"targetDcatGraph": "http://mu.semte.ch/graphs/public",
|
||||
"targetFilesGraph": "http://mu.semte.ch/graphs/public",
|
||||
"cleanupOldDumps": true
|
||||
},
|
||||
"http://redpencil.data.gift/id/jobs/concept/JobOperation/deltas/initialPublicationGraphSyncing/organizations-public-info": {
|
||||
"dcatDataSetSubject": "http://data.lblod.info/datasets/delta-producer/dumps/OrganizationsPublicInfoCacheGraphDump",
|
||||
"targetGraph": "http://redpencil.data.gift/id/deltas/producer/organizations-public-info",
|
||||
"fileBaseName": "dump-organizations-public-info",
|
||||
"publicationGraphEndpoint": "http://publication-triplestore:8890/sparql",
|
||||
"targetDcatGraph": "http://mu.semte.ch/graphs/public",
|
||||
"targetFilesGraph": "http://mu.semte.ch/graphs/public",
|
||||
"cleanupOldDumps": true
|
||||
},
|
||||
"http://redpencil.data.gift/id/jobs/concept/JobOperation/deltas/deltaDumpFileCreation/public": {
|
||||
"dcatDataSetSubject": "http://data.lblod.info/datasets/delta-producer/dumps/PublicCacheGraphDump",
|
||||
"targetGraph": "http://redpencil.data.gift/id/deltas/producer/public",
|
||||
"fileBaseName": "dump-public",
|
||||
"publicationGraphEndpoint": "http://publication-triplestore:8890/sparql",
|
||||
"targetDcatGraph": "http://mu.semte.ch/graphs/public",
|
||||
"targetFilesGraph": "http://mu.semte.ch/graphs/public",
|
||||
"cleanupOldDumps": true
|
||||
@@ -27,6 +48,7 @@
|
||||
"dcatDataSetSubject": "http://data.lblod.info/datasets/delta-producer/dumps/PublicCacheGraphDump",
|
||||
"targetGraph": "http://redpencil.data.gift/id/deltas/producer/public",
|
||||
"fileBaseName": "dump-public",
|
||||
"publicationGraphEndpoint": "http://publication-triplestore:8890/sparql",
|
||||
"targetDcatGraph": "http://mu.semte.ch/graphs/public",
|
||||
"targetFilesGraph": "http://mu.semte.ch/graphs/public",
|
||||
"cleanupOldDumps": true
|
||||
@@ -35,6 +57,7 @@
|
||||
"dcatDataSetSubject": "http://data.lblod.info/datasets/delta-producer/dumps/WorshipPostsCacheGraphDump",
|
||||
"targetGraph": "http://redpencil.data.gift/id/deltas/producer/worship-posts",
|
||||
"fileBaseName": "dump-worship-posts",
|
||||
"publicationGraphEndpoint": "http://publication-triplestore:8890/sparql",
|
||||
"targetDcatGraph": "http://mu.semte.ch/graphs/public",
|
||||
"targetFilesGraph": "http://mu.semte.ch/graphs/public",
|
||||
"cleanupOldDumps": true
|
||||
@@ -43,6 +66,7 @@
|
||||
"dcatDataSetSubject": "http://data.lblod.info/datasets/delta-producer/dumps/WorshipPostsCacheGraphDump",
|
||||
"targetGraph": "http://redpencil.data.gift/id/deltas/producer/worship-posts",
|
||||
"fileBaseName": "dump-worship-posts",
|
||||
"publicationGraphEndpoint": "http://publication-triplestore:8890/sparql",
|
||||
"targetDcatGraph": "http://mu.semte.ch/graphs/public",
|
||||
"targetFilesGraph": "http://mu.semte.ch/graphs/public",
|
||||
"cleanupOldDumps": true
|
||||
|
||||
338
config/delta-producer/organizations-public-info/export.json
Normal file
338
config/delta-producer/organizations-public-info/export.json
Normal file
@@ -0,0 +1,338 @@
|
||||
{
|
||||
"conceptScheme": "http://lblod.data.gift/concept-schemes/0d101f02-609d-4cde-bb07-639d874470c4",
|
||||
"export": [
|
||||
{
|
||||
"type": "http://data.lblod.info/vocabularies/erediensten/BestuurVanDeEredienst",
|
||||
"strictTypeExport": "true",
|
||||
"graphsFilter": [
|
||||
"http://mu.semte.ch/graphs/shared",
|
||||
"http://mu.semte.ch/graphs/worship-service"
|
||||
],
|
||||
"properties": [
|
||||
"http://mu.semte.ch/vocabularies/core/uuid",
|
||||
"http://www.w3.org/2004/02/skos/core#prefLabel",
|
||||
"http://www.w3.org/2004/02/skos/core#altLabel",
|
||||
"http://www.w3.org/ns/regorg#legalName",
|
||||
"http://www.w3.org/ns/adms#identifier",
|
||||
"http://www.w3.org/ns/regorg#orgStatus",
|
||||
"http://www.w3.org/ns/org#changedBy",
|
||||
"http://www.w3.org/ns/org#resultedFrom",
|
||||
"http://www.w3.org/ns/org#hasPost",
|
||||
"http://www.w3.org/ns/org#linkedTo",
|
||||
"http://www.w3.org/ns/org#hasSubOrganization",
|
||||
"http://www.w3.org/ns/org#classification",
|
||||
"http://data.lblod.info/vocabularies/erediensten/denominatie",
|
||||
"http://data.lblod.info/vocabularies/erediensten/grensoverschrijdend",
|
||||
"http://data.lblod.info/vocabularies/erediensten/wordtBediendDoor",
|
||||
"http://data.lblod.info/vocabularies/erediensten/typeEredienst"
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "http://data.lblod.info/vocabularies/erediensten/CentraalBestuurVanDeEredienst",
|
||||
"strictTypeExport": "true",
|
||||
"graphsFilter": [
|
||||
"http://mu.semte.ch/graphs/shared",
|
||||
"http://mu.semte.ch/graphs/worship-service"
|
||||
],
|
||||
"properties": [
|
||||
"http://mu.semte.ch/vocabularies/core/uuid",
|
||||
"http://www.w3.org/2004/02/skos/core#prefLabel",
|
||||
"http://www.w3.org/2004/02/skos/core#altLabel",
|
||||
"http://www.w3.org/ns/regorg#legalName",
|
||||
"http://www.w3.org/ns/adms#identifier",
|
||||
"http://www.w3.org/ns/regorg#orgStatus",
|
||||
"http://www.w3.org/ns/org#changedBy",
|
||||
"http://www.w3.org/ns/org#resultedFrom",
|
||||
"http://www.w3.org/ns/org#hasPost",
|
||||
"http://www.w3.org/ns/org#linkedTo",
|
||||
"http://www.w3.org/ns/org#hasSubOrganization",
|
||||
"http://www.w3.org/ns/org#classification",
|
||||
"http://data.lblod.info/vocabularies/erediensten/typeEredienst"
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "http://data.vlaanderen.be/ns/besluit#Bestuurseenheid",
|
||||
"strictTypeExport": "true",
|
||||
"graphsFilter": [
|
||||
"http://mu.semte.ch/graphs/worship-service",
|
||||
"http://mu.semte.ch/graphs/shared",
|
||||
"http://mu.semte.ch/graphs/administrative-unit"
|
||||
],
|
||||
"properties": [
|
||||
"http://mu.semte.ch/vocabularies/core/uuid",
|
||||
"http://data.lblod.info/vocabularies/erediensten/betrokkenBestuur",
|
||||
"http://data.lblod.info/vocabularies/erediensten/denominatie",
|
||||
"http://data.lblod.info/vocabularies/erediensten/grensoverschrijdend",
|
||||
"http://data.lblod.info/vocabularies/erediensten/typeEredienst",
|
||||
"http://data.lblod.info/vocabularies/erediensten/wordtBediendDoor",
|
||||
"http://data.vlaanderen.be/ns/besluit#werkingsgebied",
|
||||
"http://www.opengis.net/ont/geosparql#sfWithin",
|
||||
"http://www.w3.org/2002/07/owl#sameAs",
|
||||
"http://www.w3.org/2004/02/skos/core#altLabel",
|
||||
"http://www.w3.org/ns/regorg#legalName",
|
||||
"http://www.w3.org/2004/02/skos/core#prefLabel",
|
||||
"http://www.w3.org/ns/adms#identifier",
|
||||
"http://www.w3.org/ns/org#changedBy",
|
||||
"http://www.w3.org/ns/org#classification",
|
||||
"http://www.w3.org/ns/org#hasPost",
|
||||
"http://www.w3.org/ns/org#hasSubOrganization",
|
||||
"http://www.w3.org/ns/org#linkedTo",
|
||||
"http://www.w3.org/ns/org#resultedFrom",
|
||||
"http://www.w3.org/ns/regorg#orgStatus",
|
||||
"https://data.lblod.info/vocabularies/generiek/geplandeEindDatum",
|
||||
"http://www.w3.org/ns/org#purpose"
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "http://data.lblod.info/vocabularies/erediensten/RepresentatiefOrgaan",
|
||||
"graphsFilter": [
|
||||
"http://mu.semte.ch/graphs/shared",
|
||||
"http://mu.semte.ch/graphs/worship-service"
|
||||
],
|
||||
"properties": [
|
||||
"http://mu.semte.ch/vocabularies/core/uuid",
|
||||
"http://www.w3.org/2004/02/skos/core#prefLabel",
|
||||
"http://www.w3.org/ns/org#linkedTo",
|
||||
"http://data.lblod.info/vocabularies/erediensten/typeEredienst",
|
||||
"http://www.w3.org/ns/org#classification",
|
||||
"http://www.w3.org/ns/adms#identifier",
|
||||
"http://www.w3.org/ns/regorg#legalName",
|
||||
"http://www.w3.org/2004/02/skos/core#altLabel",
|
||||
"http://www.w3.org/ns/org#hasPrimarySite",
|
||||
"http://www.w3.org/ns/org#hasSite"
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "http://www.w3.org/ns/regorg#RegisteredOrganization",
|
||||
"strictTypeExport": "true",
|
||||
"graphsFilter": ["http://mu.semte.ch/graphs/administrative-unit"],
|
||||
"properties": [
|
||||
"http://mu.semte.ch/vocabularies/core/uuid",
|
||||
"http://data.vlaanderen.be/ns/besluit#werkingsgebied",
|
||||
"http://www.opengis.net/ont/geosparql#sfWithin",
|
||||
"http://www.w3.org/2002/07/owl#sameAs",
|
||||
"http://www.w3.org/2004/02/skos/core#altLabel",
|
||||
"http://www.w3.org/2004/02/skos/core#prefLabel",
|
||||
"http://www.w3.org/ns/regorg#legalName",
|
||||
"http://www.w3.org/ns/adms#identifier",
|
||||
"http://www.w3.org/ns/org#changedBy",
|
||||
"http://www.w3.org/ns/org#classification",
|
||||
"http://www.w3.org/ns/org#hasPost",
|
||||
"http://www.w3.org/ns/org#hasPrimarySite",
|
||||
"http://www.w3.org/ns/org#hasSite",
|
||||
"http://www.w3.org/ns/org#hasSubOrganization",
|
||||
"http://www.w3.org/ns/org#linkedTo",
|
||||
"http://www.w3.org/ns/org#resultedFrom",
|
||||
"http://www.w3.org/ns/regorg#orgStatus",
|
||||
"https://data.lblod.info/vocabularies/generiek/geplandeEindDatum",
|
||||
"http://www.w3.org/ns/org#purpose"
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "http://data.lblod.info/vocabularies/erediensten/BetrokkenLokaleBesturen",
|
||||
"graphsFilter": [
|
||||
"http://mu.semte.ch/graphs/shared",
|
||||
"http://mu.semte.ch/graphs/worship-service"
|
||||
],
|
||||
"properties": [
|
||||
"http://mu.semte.ch/vocabularies/core/uuid",
|
||||
"http://data.lblod.info/vocabularies/erediensten/typebetrokkenheid",
|
||||
"http://www.w3.org/ns/org#organization",
|
||||
"http://data.lblod.info/vocabularies/erediensten/financieringspercentage"
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "http://data.lblod.info/vocabularies/erediensten/PositieBedienaar",
|
||||
"graphsFilter": [
|
||||
"http://mu.semte.ch/graphs/shared",
|
||||
"http://mu.semte.ch/graphs/worship-service"
|
||||
],
|
||||
"properties": [
|
||||
"http://mu.semte.ch/vocabularies/core/uuid",
|
||||
"http://www.w3.org/ns/org#role",
|
||||
"http://data.lblod.info/vocabularies/erediensten/functie"
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "http://www.w3.org/ns/adms#Identifier",
|
||||
"graphsFilter": [
|
||||
"http://mu.semte.ch/graphs/shared",
|
||||
"http://mu.semte.ch/graphs/worship-service",
|
||||
"http://mu.semte.ch/graphs/administrative-unit"
|
||||
],
|
||||
"properties": [
|
||||
"http://mu.semte.ch/vocabularies/core/uuid",
|
||||
"http://www.w3.org/2004/02/skos/core#notation",
|
||||
"https://data.vlaanderen.be/ns/generiek#gestructureerdeIdentificator"
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "http://www.w3.org/ns/adms#Identifier",
|
||||
"graphsFilter": ["http://mu.semte.ch/graphs/worship-service"],
|
||||
"properties": [
|
||||
"http://mu.semte.ch/vocabularies/core/uuid",
|
||||
"http://www.w3.org/2004/02/skos/core#notation",
|
||||
"https://data.vlaanderen.be/ns/generiek#gestructureerdeIdentificator"
|
||||
],
|
||||
"additionalFilter": "?ro <http://www.w3.org/ns/adms#identifier> ?subject ; a <http://data.lblod.info/vocabularies/erediensten/RepresentatiefOrgaan> ."
|
||||
},
|
||||
{
|
||||
"type": "https://data.vlaanderen.be/ns/generiek#GestructureerdeIdentificator",
|
||||
"graphsFilter": [
|
||||
"http://mu.semte.ch/graphs/shared",
|
||||
"http://mu.semte.ch/graphs/worship-service",
|
||||
"http://mu.semte.ch/graphs/administrative-unit"
|
||||
],
|
||||
"properties": [
|
||||
"http://mu.semte.ch/vocabularies/core/uuid",
|
||||
"https://data.vlaanderen.be/ns/generiek#lokaleIdentificator"
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "https://data.vlaanderen.be/ns/generiek#GestructureerdeIdentificator",
|
||||
"graphsFilter": ["http://mu.semte.ch/graphs/worship-service"],
|
||||
"properties": [
|
||||
"http://mu.semte.ch/vocabularies/core/uuid",
|
||||
"https://data.vlaanderen.be/ns/generiek#lokaleIdentificator"
|
||||
],
|
||||
"additionalFilter": "?ro <http://www.w3.org/ns/adms#identifier>/<https://data.vlaanderen.be/ns/generiek#gestructureerdeIdentificator> ?subject ; a <http://data.lblod.info/vocabularies/erediensten/RepresentatiefOrgaan> ."
|
||||
},
|
||||
{
|
||||
"type": "http://lblod.data.gift/vocabularies/organisatie/BestuurseenheidClassificatieCode",
|
||||
"graphsFilter": ["http://mu.semte.ch/graphs/public"],
|
||||
"properties": [
|
||||
"http://mu.semte.ch/vocabularies/core/uuid",
|
||||
"http://www.w3.org/2004/02/skos/core#prefLabel"
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "http://mu.semte.ch/vocabularies/ext/RepresentatiefOrgaanClassificatieCode",
|
||||
"graphsFilter": [
|
||||
"http://mu.semte.ch/graphs/public"
|
||||
],
|
||||
"properties": [
|
||||
"http://mu.semte.ch/vocabularies/core/uuid",
|
||||
"http://www.w3.org/2004/02/skos/core#prefLabel"
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "http://data.vlaanderen.be/ns/besluit#Bestuursorgaan",
|
||||
"graphsFilter": [
|
||||
"http://mu.semte.ch/graphs/shared",
|
||||
"http://mu.semte.ch/graphs/administrative-unit",
|
||||
"http://mu.semte.ch/graphs/worship-service"
|
||||
],
|
||||
"properties": [
|
||||
"http://mu.semte.ch/vocabularies/core/uuid",
|
||||
"http://data.vlaanderen.be/ns/besluit#bestuurt",
|
||||
"http://www.w3.org/ns/org#classification",
|
||||
"http://data.vlaanderen.be/ns/mandaat#bindingEinde",
|
||||
"http://data.vlaanderen.be/ns/mandaat#bindingStart",
|
||||
"https://data.vlaanderen.be/ns/generiek#isTijdspecialisatieVan",
|
||||
"http://www.w3.org/ns/org#hasPost"
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "http://lblod.data.gift/vocabularies/organisatie/TypeEredienst",
|
||||
"graphsFilter": ["http://mu.semte.ch/graphs/public"],
|
||||
"properties": [
|
||||
"http://mu.semte.ch/vocabularies/core/uuid",
|
||||
"http://www.w3.org/2004/02/skos/core#prefLabel"
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "http://lblod.data.gift/vocabularies/organisatie/BestuursorgaanClassificatieCode",
|
||||
"graphsFilter": ["http://mu.semte.ch/graphs/public"],
|
||||
"properties": [
|
||||
"http://mu.semte.ch/vocabularies/core/uuid",
|
||||
"http://www.w3.org/2004/02/skos/core#prefLabel"
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "http://www.w3.org/ns/org#ChangeEvent",
|
||||
"graphsFilter": [
|
||||
"http://mu.semte.ch/graphs/shared",
|
||||
"http://mu.semte.ch/graphs/worship-service",
|
||||
"http://mu.semte.ch/graphs/administrative-unit"
|
||||
],
|
||||
"properties": [
|
||||
"http://mu.semte.ch/vocabularies/core/uuid",
|
||||
"http://purl.org/dc/terms/date",
|
||||
"http://purl.org/dc/terms/description",
|
||||
"http://data.lblod.info/vocabularies/contacthub/typeWijziging",
|
||||
"http://www.w3.org/ns/org#resultedFrom",
|
||||
"http://www.w3.org/ns/org#changedBy",
|
||||
"http://lblod.data.gift/vocabularies/organisatie/veranderingsgebeurtenisResultaat",
|
||||
"http://www.w3.org/ns/org#originalOrganization",
|
||||
"http://www.w3.org/ns/org#resultingOrganization",
|
||||
"http://data.europa.eu/m8g/hasFormalFramework"
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "http://lblod.data.gift/vocabularies/organisatie/Veranderingsgebeurtenis",
|
||||
"graphsFilter": ["http://mu.semte.ch/graphs/public"],
|
||||
"properties": [
|
||||
"http://mu.semte.ch/vocabularies/core/uuid",
|
||||
"http://www.w3.org/2004/02/skos/core#prefLabel"
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "http://lblod.data.gift/vocabularies/organisatie/OrganisatieStatusCode",
|
||||
"graphsFilter": ["http://mu.semte.ch/graphs/public"],
|
||||
"properties": [
|
||||
"http://mu.semte.ch/vocabularies/core/uuid",
|
||||
"http://www.w3.org/2004/02/skos/core#prefLabel"
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "http://lblod.data.gift/vocabularies/organisatie/TypeVestiging",
|
||||
"graphsFilter": ["http://mu.semte.ch/graphs/public"],
|
||||
"properties": [
|
||||
"http://mu.semte.ch/vocabularies/core/uuid",
|
||||
"http://www.w3.org/2004/02/skos/core#prefLabel"
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "http://data.vlaanderen.be/ns/mandaat#Mandaat",
|
||||
"graphsFilter": [
|
||||
"http://mu.semte.ch/graphs/shared",
|
||||
"http://mu.semte.ch/graphs/worship-service",
|
||||
"http://mu.semte.ch/graphs/administrative-unit"
|
||||
],
|
||||
"properties": [
|
||||
"http://mu.semte.ch/vocabularies/core/uuid",
|
||||
"http://www.w3.org/ns/org#role"
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "http://data.lblod.info/vocabularies/leidinggevenden/Bestuursfunctie",
|
||||
"graphsFilter": [
|
||||
"http://mu.semte.ch/graphs/shared",
|
||||
"http://mu.semte.ch/graphs/worship-service",
|
||||
"http://mu.semte.ch/graphs/administrative-unit"
|
||||
],
|
||||
"properties": [
|
||||
"http://mu.semte.ch/vocabularies/core/uuid",
|
||||
"http://www.w3.org/ns/org#role",
|
||||
"http://www.w3.org/2004/02/skos/core#prefLabel"
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "http://www.w3.org/2004/02/skos/core#Concept",
|
||||
"graphsFilter": ["http://mu.semte.ch/graphs/public"],
|
||||
"pathToConceptScheme": ["http://www.w3.org/2004/02/skos/core#inScheme"],
|
||||
"properties": [
|
||||
"http://mu.semte.ch/vocabularies/core/uuid",
|
||||
"http://www.w3.org/ns/org#role",
|
||||
"http://www.w3.org/2004/02/skos/core#prefLabel",
|
||||
"http://www.w3.org/2004/02/skos/core#notation",
|
||||
"https://schema.org/startDate",
|
||||
"https://schema.org/endDate",
|
||||
"http://www.w3.org/2004/02/skos/core#broader",
|
||||
"http://www.w3.org/2004/02/skos/core#exactMatch",
|
||||
"http://www.w3.org/2004/02/skos/core#narrower",
|
||||
"http://www.w3.org/2004/02/skos/core#narrowMatch"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -65,6 +65,7 @@
|
||||
"http://schema.org/email",
|
||||
"http://schema.org/faxNumber",
|
||||
"http://schema.org/telephone",
|
||||
"http://xmlns.com/foaf/0.1/page",
|
||||
"http://www.w3.org/ns/locn#address"
|
||||
]
|
||||
},
|
||||
@@ -126,6 +127,7 @@
|
||||
],
|
||||
"properties": [
|
||||
"http://www.w3.org/2004/02/skos/core#prefLabel",
|
||||
"http://www.w3.org/ns/regorg#legalName",
|
||||
"http://www.w3.org/2004/02/skos/core#altLabel",
|
||||
"http://www.w3.org/ns/adms#identifier",
|
||||
"http://www.w3.org/ns/regorg#orgStatus",
|
||||
@@ -154,6 +156,7 @@
|
||||
],
|
||||
"properties": [
|
||||
"http://www.w3.org/2004/02/skos/core#prefLabel",
|
||||
"http://www.w3.org/ns/regorg#legalName",
|
||||
"http://www.w3.org/2004/02/skos/core#altLabel",
|
||||
"http://www.w3.org/ns/adms#identifier",
|
||||
"http://www.w3.org/ns/regorg#orgStatus",
|
||||
@@ -170,6 +173,41 @@
|
||||
"http://data.lblod.info/vocabularies/erediensten/typeEredienst"
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "http://data.vlaanderen.be/ns/besluit#Bestuurseenheid",
|
||||
"strictTypeExport": "true",
|
||||
"graphsFilter": [
|
||||
"http://mu.semte.ch/graphs/worship-service",
|
||||
"http://mu.semte.ch/graphs/shared",
|
||||
"http://mu.semte.ch/graphs/administrative-unit"
|
||||
],
|
||||
"properties": [
|
||||
"http://mu.semte.ch/vocabularies/core/uuid",
|
||||
"http://data.lblod.info/vocabularies/erediensten/betrokkenBestuur",
|
||||
"http://data.lblod.info/vocabularies/erediensten/denominatie",
|
||||
"http://data.lblod.info/vocabularies/erediensten/grensoverschrijdend",
|
||||
"http://data.lblod.info/vocabularies/erediensten/typeEredienst",
|
||||
"http://data.lblod.info/vocabularies/erediensten/wordtBediendDoor",
|
||||
"http://data.vlaanderen.be/ns/besluit#werkingsgebied",
|
||||
"http://www.opengis.net/ont/geosparql#sfWithin",
|
||||
"http://www.w3.org/2002/07/owl#sameAs",
|
||||
"http://www.w3.org/2004/02/skos/core#altLabel",
|
||||
"http://www.w3.org/2004/02/skos/core#prefLabel",
|
||||
"http://www.w3.org/ns/regorg#legalName",
|
||||
"http://www.w3.org/ns/adms#identifier",
|
||||
"http://www.w3.org/ns/org#changedBy",
|
||||
"http://www.w3.org/ns/org#classification",
|
||||
"http://www.w3.org/ns/org#hasPost",
|
||||
"http://www.w3.org/ns/org#hasPrimarySite",
|
||||
"http://www.w3.org/ns/org#hasSite",
|
||||
"http://www.w3.org/ns/org#hasSubOrganization",
|
||||
"http://www.w3.org/ns/org#linkedTo",
|
||||
"http://www.w3.org/ns/org#resultedFrom",
|
||||
"http://www.w3.org/ns/regorg#orgStatus",
|
||||
"https://data.lblod.info/vocabularies/generiek/geplandeEindDatum",
|
||||
"http://www.w3.org/ns/org#purpose"
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "http://data.lblod.info/vocabularies/erediensten/RepresentatiefOrgaan",
|
||||
"strictTypeExport": "true",
|
||||
@@ -179,6 +217,7 @@
|
||||
],
|
||||
"properties": [
|
||||
"http://www.w3.org/2004/02/skos/core#prefLabel",
|
||||
"http://www.w3.org/ns/regorg#legalName",
|
||||
"http://www.w3.org/2004/02/skos/core#altLabel",
|
||||
"http://www.w3.org/ns/adms#identifier",
|
||||
"http://www.w3.org/ns/regorg#orgStatus",
|
||||
@@ -189,7 +228,36 @@
|
||||
"http://www.w3.org/ns/org#hasPost",
|
||||
"http://www.w3.org/ns/org#linkedTo",
|
||||
"http://www.w3.org/ns/org#hasSubOrganization",
|
||||
"http://data.lblod.info/vocabularies/erediensten/typeEredienst"
|
||||
"http://data.lblod.info/vocabularies/erediensten/typeEredienst",
|
||||
"http://www.w3.org/ns/org#classification"
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "http://www.w3.org/ns/regorg#RegisteredOrganization",
|
||||
"strictTypeExport": "true",
|
||||
"graphsFilter": [
|
||||
"http://mu.semte.ch/graphs/administrative-unit"
|
||||
],
|
||||
"properties": [
|
||||
"http://mu.semte.ch/vocabularies/core/uuid",
|
||||
"http://data.vlaanderen.be/ns/besluit#werkingsgebied",
|
||||
"http://www.opengis.net/ont/geosparql#sfWithin",
|
||||
"http://www.w3.org/2002/07/owl#sameAs",
|
||||
"http://www.w3.org/2004/02/skos/core#altLabel",
|
||||
"http://www.w3.org/2004/02/skos/core#prefLabel",
|
||||
"http://www.w3.org/ns/regorg#legalName",
|
||||
"http://www.w3.org/ns/adms#identifier",
|
||||
"http://www.w3.org/ns/org#changedBy",
|
||||
"http://www.w3.org/ns/org#classification",
|
||||
"http://www.w3.org/ns/org#hasPost",
|
||||
"http://www.w3.org/ns/org#hasPrimarySite",
|
||||
"http://www.w3.org/ns/org#hasSite",
|
||||
"http://www.w3.org/ns/org#hasSubOrganization",
|
||||
"http://www.w3.org/ns/org#linkedTo",
|
||||
"http://www.w3.org/ns/org#resultedFrom",
|
||||
"http://www.w3.org/ns/regorg#orgStatus",
|
||||
"https://data.lblod.info/vocabularies/generiek/geplandeEindDatum",
|
||||
"http://www.w3.org/ns/org#purpose"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -206,7 +274,8 @@
|
||||
"http://data.vlaanderen.be/ns/besluit#bestuurt",
|
||||
"http://www.w3.org/ns/org#classification",
|
||||
"https://data.vlaanderen.be/ns/generiek#isTijdspecialisatieVan",
|
||||
"http://www.w3.org/ns/org#hasPost"
|
||||
"http://www.w3.org/ns/org#hasPost",
|
||||
"http://data.lblod.info/vocabularies/leidinggevenden/heeftBestuursfunctie"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -317,6 +386,18 @@
|
||||
"http://www.w3.org/2004/02/skos/core#prefLabel"
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "http://www.w3.org/ns/prov#Location",
|
||||
"graphsFilter": [
|
||||
"http://mu.semte.ch/graphs/shared"
|
||||
],
|
||||
"properties": [
|
||||
"http://www.w3.org/2000/01/rdf-schema#label",
|
||||
"http://www.opengis.net/ont/geosparql#sfWithin",
|
||||
"http://mu.semte.ch/vocabularies/ext/werkingsgebiedNiveau",
|
||||
"http://www.w3.org/2004/02/skos/core#exactMatch"
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "http://lblod.data.gift/vocabularies/organisatie/OrganisatieStatusCode",
|
||||
"graphsFilter": [
|
||||
@@ -396,7 +477,7 @@
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "http://lblod.data.gift/vocabularies/organisatie/BedienaarFinanceringCode",
|
||||
"type": "http://lblod.data.gift/vocabularies/organisatie/BedienaarFinancieringCode",
|
||||
"graphsFilter": [
|
||||
"http://mu.semte.ch/graphs/public"
|
||||
],
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
"properties": [
|
||||
"http://mu.semte.ch/vocabularies/core/uuid",
|
||||
"http://www.w3.org/2004/02/skos/core#prefLabel",
|
||||
"http://www.w3.org/ns/regorg#legalName",
|
||||
"http://www.w3.org/2004/02/skos/core#altLabel",
|
||||
"http://www.w3.org/ns/adms#identifier",
|
||||
"http://www.w3.org/ns/regorg#orgStatus",
|
||||
@@ -46,6 +47,7 @@
|
||||
"properties": [
|
||||
"http://mu.semte.ch/vocabularies/core/uuid",
|
||||
"http://www.w3.org/2004/02/skos/core#prefLabel",
|
||||
"http://www.w3.org/ns/regorg#legalName",
|
||||
"http://www.w3.org/2004/02/skos/core#altLabel",
|
||||
"http://www.w3.org/ns/adms#identifier",
|
||||
"http://www.w3.org/ns/regorg#orgStatus",
|
||||
@@ -84,6 +86,7 @@
|
||||
"http://www.w3.org/2002/07/owl#sameAs",
|
||||
"http://www.w3.org/2004/02/skos/core#altLabel",
|
||||
"http://www.w3.org/2004/02/skos/core#prefLabel",
|
||||
"http://www.w3.org/ns/regorg#legalName",
|
||||
"http://www.w3.org/ns/adms#identifier",
|
||||
"http://www.w3.org/ns/org#changedBy",
|
||||
"http://www.w3.org/ns/org#classification",
|
||||
@@ -96,6 +99,53 @@
|
||||
"http://www.w3.org/ns/regorg#orgStatus"
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "http://data.vlaanderen.be/ns/besluit#Bestuurseenheid",
|
||||
"strictTypeExport": "true",
|
||||
"graphsFilter": [
|
||||
"http://mu.semte.ch/graphs/public"
|
||||
],
|
||||
"comment": "Bound to ABB only.",
|
||||
"properties": [
|
||||
"http://mu.semte.ch/vocabularies/core/uuid",
|
||||
"http://www.w3.org/2004/02/skos/core#prefLabel",
|
||||
"http://purl.org/dc/terms/identifier",
|
||||
"http://www.w3.org/ns/org#classification"
|
||||
],
|
||||
"additionalFilter": "BIND(<http://data.lblod.info/id/bestuurseenheden/141d9d6b-54af-4d17-b313-8d1c30bc3f5b> as ?subject)"
|
||||
},
|
||||
{
|
||||
"type": "http://www.w3.org/ns/regorg#RegisteredOrganization",
|
||||
"strictTypeExport": "true",
|
||||
"graphsFilter": [
|
||||
"http://mu.semte.ch/graphs/administrative-unit"
|
||||
],
|
||||
"pathToConceptScheme": [
|
||||
"http://www.w3.org/ns/org#classification",
|
||||
"http://www.w3.org/2004/02/skos/core#inScheme"
|
||||
],
|
||||
"properties": [
|
||||
"http://mu.semte.ch/vocabularies/core/uuid",
|
||||
"http://data.vlaanderen.be/ns/besluit#werkingsgebied",
|
||||
"http://www.opengis.net/ont/geosparql#sfWithin",
|
||||
"http://www.w3.org/2002/07/owl#sameAs",
|
||||
"http://www.w3.org/2004/02/skos/core#altLabel",
|
||||
"http://www.w3.org/2004/02/skos/core#prefLabel",
|
||||
"http://www.w3.org/ns/regorg#legalName",
|
||||
"http://www.w3.org/ns/adms#identifier",
|
||||
"http://www.w3.org/ns/org#changedBy",
|
||||
"http://www.w3.org/ns/org#classification",
|
||||
"http://www.w3.org/ns/org#hasPost",
|
||||
"http://www.w3.org/ns/org#hasPrimarySite",
|
||||
"http://www.w3.org/ns/org#hasSite",
|
||||
"http://www.w3.org/ns/org#hasSubOrganization",
|
||||
"http://www.w3.org/ns/org#linkedTo",
|
||||
"http://www.w3.org/ns/org#resultedFrom",
|
||||
"http://www.w3.org/ns/regorg#orgStatus",
|
||||
"https://data.lblod.info/vocabularies/generiek/geplandeEindDatum",
|
||||
"http://www.w3.org/ns/org#purpose"
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "http://data.lblod.info/vocabularies/erediensten/RepresentatiefOrgaan",
|
||||
"graphsFilter": [
|
||||
@@ -105,8 +155,11 @@
|
||||
"properties": [
|
||||
"http://mu.semte.ch/vocabularies/core/uuid",
|
||||
"http://www.w3.org/2004/02/skos/core#prefLabel",
|
||||
"http://www.w3.org/ns/regorg#legalName",
|
||||
"http://www.w3.org/2004/02/skos/core#altLabel",
|
||||
"http://www.w3.org/ns/org#linkedTo",
|
||||
"http://data.lblod.info/vocabularies/erediensten/typeEredienst",
|
||||
"http://www.w3.org/ns/org#classification",
|
||||
"http://www.w3.org/ns/adms#identifier"
|
||||
]
|
||||
},
|
||||
@@ -277,6 +330,16 @@
|
||||
"http://www.w3.org/2004/02/skos/core#prefLabel"
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "http://mu.semte.ch/vocabularies/ext/RepresentatiefOrgaanClassificatieCode",
|
||||
"graphsFilter": [
|
||||
"http://mu.semte.ch/graphs/public"
|
||||
],
|
||||
"properties": [
|
||||
"http://mu.semte.ch/vocabularies/core/uuid",
|
||||
"http://www.w3.org/2004/02/skos/core#prefLabel"
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "http://data.vlaanderen.be/ns/besluit#Bestuursorgaan",
|
||||
"graphsFilter": [
|
||||
@@ -291,7 +354,8 @@
|
||||
"http://data.vlaanderen.be/ns/mandaat#bindingEinde",
|
||||
"http://data.vlaanderen.be/ns/mandaat#bindingStart",
|
||||
"https://data.vlaanderen.be/ns/generiek#isTijdspecialisatieVan",
|
||||
"http://www.w3.org/ns/org#hasPost"
|
||||
"http://www.w3.org/ns/org#hasPost",
|
||||
"http://data.lblod.info/vocabularies/leidinggevenden/heeftBestuursfunctie"
|
||||
],
|
||||
"additionalFilter": "?subject (<https://data.vlaanderen.be/ns/generiek#isTijdspecialisatieVan>/<http://www.w3.org/ns/org#classification>/<http://www.w3.org/2004/02/skos/core#inScheme>)|(<http://www.w3.org/ns/org#classification>/<http://www.w3.org/2004/02/skos/core#inScheme>) <http://lblod.data.gift/concept-schemes/10caf4a4-1ff5-4c05-917e-56489910d68b> ."
|
||||
},
|
||||
@@ -420,6 +484,19 @@
|
||||
"http://www.w3.org/ns/org#role",
|
||||
"http://www.w3.org/2004/02/skos/core#prefLabel"
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "http://mu.semte.ch/vocabularies/ext/GeregistreerdeOrganisatieClassificatieCode",
|
||||
"graphsFilter": [
|
||||
"http://mu.semte.ch/graphs/public"
|
||||
],
|
||||
"pathToConceptScheme": [
|
||||
"http://www.w3.org/2004/02/skos/core#inScheme"
|
||||
],
|
||||
"properties": [
|
||||
"http://mu.semte.ch/vocabularies/core/uuid",
|
||||
"http://www.w3.org/2004/02/skos/core#prefLabel"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -0,0 +1,93 @@
|
||||
{
|
||||
"organizations": {
|
||||
"deltaInterval": 10000,
|
||||
"errorCreatorUri": "http://lblod.data.gift/services/delta-producer-publication-graph-maintainer-organizations",
|
||||
"exportConfigPath": "/config/organizations/export.json",
|
||||
"filesPath": "/organizations/files",
|
||||
"healingJobOperation": "http://redpencil.data.gift/id/jobs/concept/JobOperation/deltas/healingOperation/organizations",
|
||||
"initialPublicationGraphSyncJobOperation": "http://redpencil.data.gift/id/jobs/concept/JobOperation/deltas/initialPublicationGraphSyncing/organizations",
|
||||
"jobsGraph": "http://mu.semte.ch/graphs/jobs",
|
||||
"publicationGraph": "http://redpencil.data.gift/id/deltas/producer/organizations",
|
||||
"publisherUri": "http://data.lblod.info/services/delta-production-json-diff-file-manager/organizations",
|
||||
"queuePollInterval": 3000,
|
||||
"relativeFilePath": "/deltas/organizations",
|
||||
"serveDeltaFiles": true,
|
||||
"skipMuAuthInitialSync": true,
|
||||
"skipMuAuthHealing": true,
|
||||
"useFileDiff": true,
|
||||
"healingInitialBatchSizeInsert": 1000,
|
||||
"useVirtuosoForExpensiveSelects": true,
|
||||
"errorGraph": "http://mu.semte.ch/graphs/jobs",
|
||||
"loginPath": "/organizations/login",
|
||||
"logOutgoingDelta": true
|
||||
},
|
||||
"public": {
|
||||
"deltaInterval": 10000,
|
||||
"errorCreatorUri": "http://lblod.data.gift/services/delta-producer-publication-graph-maintainer-public",
|
||||
"exportConfigPath": "/config/public/export.json",
|
||||
"filesPath": "/public/files",
|
||||
"healingJobOperation": "http://redpencil.data.gift/id/jobs/concept/JobOperation/deltas/healingOperation/public",
|
||||
"initialPublicationGraphSyncJobOperation": "http://redpencil.data.gift/id/jobs/concept/JobOperation/deltas/initialPublicationGraphSyncing/public",
|
||||
"jobsGraph": "http://mu.semte.ch/graphs/jobs",
|
||||
"publicationGraph": "http://redpencil.data.gift/id/deltas/producer/public",
|
||||
"publisherUri": "http://data.lblod.info/services/delta-production-json-diff-file-manager/public",
|
||||
"queuePollInterval": 3000,
|
||||
"relativeFilePath": "/deltas/public",
|
||||
"serveDeltaFiles": true,
|
||||
"skipMuAuthInitialSync": true,
|
||||
"skipMuAuthHealing": true,
|
||||
"useFileDiff": true,
|
||||
"healingInitialBatchSizeInsert": 1000,
|
||||
"healingPatchPublicationGraphTaskOperation": 500,
|
||||
"useVirtuosoForExpensiveSelects": true,
|
||||
"errorGraph": "http://mu.semte.ch/graphs/jobs",
|
||||
"loginPath": "/public/login",
|
||||
"logOutgoingDelta": true
|
||||
},
|
||||
"organizations-public-info": {
|
||||
"deltaInterval": 10000,
|
||||
"errorCreatorUri": "http://lblod.data.gift/services/delta-producer-publication-graph-maintainer-organizations-public-info",
|
||||
"exportConfigPath": "/config/organizations-public-info/export.json",
|
||||
"filesPath": "/organizations-public-info/files",
|
||||
"healingJobOperation": "http://redpencil.data.gift/id/jobs/concept/JobOperation/deltas/healingOperation/organizations-public-info",
|
||||
"initialPublicationGraphSyncJobOperation": "http://redpencil.data.gift/id/jobs/concept/JobOperation/deltas/initialPublicationGraphSyncing/organizations-public-info",
|
||||
"jobsGraph": "http://mu.semte.ch/graphs/jobs",
|
||||
"publicationGraph": "http://redpencil.data.gift/id/deltas/producer/organizations-public-info",
|
||||
"publisherUri": "http://data.lblod.info/services/delta-production-json-diff-file-manager/organizations-public-info",
|
||||
"queuePollInterval": 3000,
|
||||
"relativeFilePath": "/deltas/organizations-public-info",
|
||||
"serveDeltaFiles": true,
|
||||
"skipMuAuthInitialSync": true,
|
||||
"skipMuAuthHealing": true,
|
||||
"useFileDiff": true,
|
||||
"healingInitialBatchSizeInsert": 1000,
|
||||
"healingPatchPublicationGraphTaskOperation": 500,
|
||||
"useVirtuosoForExpensiveSelects": true,
|
||||
"errorGraph": "http://mu.semte.ch/graphs/jobs",
|
||||
"loginPath": "/organizations-public-info/login",
|
||||
"logOutgoingDelta": true
|
||||
},
|
||||
"worship-posts": {
|
||||
"deltaInterval": 10000,
|
||||
"errorCreatorUri": "http://lblod.data.gift/services/delta-producer-publication-graph-maintainer-worship-posts",
|
||||
"exportConfigPath": "/config/worship-posts/export.json",
|
||||
"filesPath": "/worship-posts/files",
|
||||
"healingJobOperation": "http://redpencil.data.gift/id/jobs/concept/JobOperation/deltas/healingOperation/worship-posts",
|
||||
"initialPublicationGraphSyncJobOperation": "http://redpencil.data.gift/id/jobs/concept/JobOperation/deltas/initialPublicationGraphSyncing/worship-posts",
|
||||
"jobsGraph": "http://mu.semte.ch/graphs/jobs",
|
||||
"publicationGraph": "http://redpencil.data.gift/id/deltas/producer/worship-posts",
|
||||
"publisherUri": "http://data.lblod.info/services/delta-production-json-diff-file-manager/worship-posts",
|
||||
"queuePollInterval": 3000,
|
||||
"relativeFilePath": "/deltas/worship-posts",
|
||||
"serveDeltaFiles": true,
|
||||
"skipMuAuthInitialSync": true,
|
||||
"skipMuAuthHealing": true,
|
||||
"useFileDiff": true,
|
||||
"healingInitialBatchSizeInsert": 1000,
|
||||
"healingPatchPublicationGraphTaskOperation": 500,
|
||||
"useVirtuosoForExpensiveSelects": true,
|
||||
"errorGraph": "http://mu.semte.ch/graphs/jobs",
|
||||
"loginPath": "/worship-posts/login",
|
||||
"logOutgoingDelta": true
|
||||
}
|
||||
}
|
||||
@@ -22,6 +22,7 @@
|
||||
"properties": [
|
||||
"http://mu.semte.ch/vocabularies/core/uuid",
|
||||
"http://www.w3.org/2004/02/skos/core#prefLabel",
|
||||
"http://www.w3.org/ns/regorg#legalName",
|
||||
"http://www.w3.org/2004/02/skos/core#altLabel",
|
||||
"http://www.w3.org/ns/regorg#orgStatus",
|
||||
"http://data.lblod.info/vocabularies/erediensten/typeEredienst",
|
||||
@@ -42,6 +43,7 @@
|
||||
"properties": [
|
||||
"http://mu.semte.ch/vocabularies/core/uuid",
|
||||
"http://www.w3.org/2004/02/skos/core#prefLabel",
|
||||
"http://www.w3.org/ns/regorg#legalName",
|
||||
"http://www.w3.org/2004/02/skos/core#altLabel",
|
||||
"http://www.w3.org/ns/regorg#orgStatus",
|
||||
"http://data.lblod.info/vocabularies/erediensten/typeEredienst",
|
||||
@@ -61,6 +63,7 @@
|
||||
"properties": [
|
||||
"http://mu.semte.ch/vocabularies/core/uuid",
|
||||
"http://www.w3.org/2004/02/skos/core#prefLabel",
|
||||
"http://www.w3.org/ns/regorg#legalName",
|
||||
"http://www.w3.org/2004/02/skos/core#altLabel",
|
||||
"http://www.w3.org/ns/regorg#orgStatus",
|
||||
"http://data.lblod.info/vocabularies/erediensten/typeEredienst",
|
||||
@@ -121,12 +124,14 @@
|
||||
"properties": [
|
||||
"http://mu.semte.ch/vocabularies/core/uuid",
|
||||
"http://www.w3.org/2004/02/skos/core#prefLabel",
|
||||
"http://www.w3.org/ns/regorg#legalName",
|
||||
"http://www.w3.org/2004/02/skos/core#altLabel",
|
||||
"http://www.w3.org/ns/regorg#orgStatus",
|
||||
"http://www.w3.org/ns/org#hasPrimarySite",
|
||||
"http://www.w3.org/ns/org#hasSite",
|
||||
"http://www.w3.org/ns/org#linkedTo",
|
||||
"http://data.lblod.info/vocabularies/erediensten/typeEredienst",
|
||||
"http://www.w3.org/ns/org#classification",
|
||||
"http://www.w3.org/ns/adms#identifier"
|
||||
]
|
||||
},
|
||||
|
||||
@@ -33,7 +33,6 @@ export default [
|
||||
ignoreFromSelf: true
|
||||
}
|
||||
},
|
||||
|
||||
{
|
||||
match: {
|
||||
graph: {
|
||||
@@ -51,7 +50,6 @@ export default [
|
||||
ignoreFromSelf: true
|
||||
}
|
||||
},
|
||||
|
||||
{
|
||||
match: {
|
||||
graph: {
|
||||
@@ -69,7 +67,6 @@ export default [
|
||||
ignoreFromSelf: true
|
||||
}
|
||||
},
|
||||
|
||||
{
|
||||
match: {
|
||||
predicate: {
|
||||
@@ -92,78 +89,7 @@ export default [
|
||||
match: {
|
||||
},
|
||||
callback: {
|
||||
url: 'http://delta-producer-pub-graph-maintainer-organizations/delta',
|
||||
method: 'POST'
|
||||
},
|
||||
options: {
|
||||
resourceFormat: 'v0.0.1',
|
||||
gracePeriod: 1000,
|
||||
ignoreFromSelf: true,
|
||||
optOutMuScopeIds: [
|
||||
"http://redpencil.data.gift/id/concept/muScope/deltas/initialSync",
|
||||
"http://redpencil.data.gift/id/concept/muScope/deltas/publicationGraphMaintenance"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
match: {
|
||||
graph: {
|
||||
type: 'uri',
|
||||
value: 'http://redpencil.data.gift/id/deltas/producer/organizations'
|
||||
}
|
||||
},
|
||||
callback: {
|
||||
url: 'http://delta-producer-json-diff-publisher-organizations/delta',
|
||||
method: 'POST'
|
||||
},
|
||||
options: {
|
||||
resourceFormat: 'v0.0.1',
|
||||
gracePeriod: 1000,
|
||||
ignoreFromSelf: true,
|
||||
optOutMuScopeIds: ["http://redpencil.data.gift/id/concept/muScope/deltas/initialSync"]
|
||||
}
|
||||
},
|
||||
{
|
||||
match: {
|
||||
},
|
||||
callback: {
|
||||
url: 'http://delta-producer-pub-graph-maintainer-public/delta',
|
||||
method: 'POST'
|
||||
},
|
||||
options: {
|
||||
resourceFormat: 'v0.0.1',
|
||||
gracePeriod: 1000,
|
||||
ignoreFromSelf: true,
|
||||
optOutMuScopeIds: [
|
||||
"http://redpencil.data.gift/id/concept/muScope/deltas/initialSync",
|
||||
"http://redpencil.data.gift/id/concept/muScope/deltas/publicationGraphMaintenance"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
match: {
|
||||
graph: {
|
||||
type: 'uri',
|
||||
value: 'http://redpencil.data.gift/id/deltas/producer/public'
|
||||
}
|
||||
},
|
||||
callback: {
|
||||
url: 'http://delta-producer-json-diff-publisher-public/delta',
|
||||
method: 'POST'
|
||||
},
|
||||
options: {
|
||||
resourceFormat: 'v0.0.1',
|
||||
gracePeriod: 1000,
|
||||
ignoreFromSelf: true,
|
||||
optOutMuScopeIds: ["http://redpencil.data.gift/id/concept/muScope/deltas/initialSync"]
|
||||
}
|
||||
},
|
||||
{
|
||||
match: {
|
||||
// anything
|
||||
},
|
||||
callback: {
|
||||
url: 'http://delta-producer-pub-graph-maintainer-worship-posts/delta',
|
||||
url: 'http://delta-producer-publication-graph-maintainer/delta',
|
||||
method: 'POST'
|
||||
},
|
||||
options: {
|
||||
@@ -197,5 +123,111 @@ export default [
|
||||
ignoreFromSelf: true,
|
||||
optOutMuScopeIds: ["http://redpencil.data.gift/id/concept/muScope/deltas/initialSync"]
|
||||
}
|
||||
},
|
||||
// organizations-sync-with-sharepoint/delta : jobs come from the jobs graph, data from the two main graphs
|
||||
{
|
||||
match: {
|
||||
graph: {
|
||||
type: 'uri',
|
||||
value: 'http://mu.semte.ch/graphs/jobs'
|
||||
}
|
||||
},
|
||||
callback: {
|
||||
url: 'http://organizations-sync-with-sharepoint/delta',
|
||||
method: 'POST'
|
||||
},
|
||||
options: {
|
||||
resourceFormat: 'v0.0.1',
|
||||
gracePeriod: 1000,
|
||||
ignoreFromSelf: true,
|
||||
optOutMuScopeIds: [ "http://redpencil.data.gift/id/concept/muScope/deltas/initialSync" ]
|
||||
}
|
||||
},
|
||||
{
|
||||
match: {
|
||||
graph: {
|
||||
type: 'uri',
|
||||
value: 'http://mu.semte.ch/graphs/shared'
|
||||
}
|
||||
},
|
||||
callback: {
|
||||
url: 'http://organizations-sync-with-sharepoint/delta',
|
||||
method: 'POST'
|
||||
},
|
||||
options: {
|
||||
resourceFormat: 'v0.0.1',
|
||||
gracePeriod: 1000,
|
||||
ignoreFromSelf: true,
|
||||
optOutMuScopeIds: [ "http://redpencil.data.gift/id/concept/muScope/deltas/initialSync" ]
|
||||
}
|
||||
},
|
||||
{
|
||||
match: {
|
||||
graph: {
|
||||
type: 'uri',
|
||||
value: 'http://mu.semte.ch/graphs/administrative-unit'
|
||||
}
|
||||
},
|
||||
callback: {
|
||||
url: 'http://organizations-sync-with-sharepoint/delta',
|
||||
method: 'POST'
|
||||
},
|
||||
options: {
|
||||
resourceFormat: 'v0.0.1',
|
||||
gracePeriod: 1000,
|
||||
ignoreFromSelf: true,
|
||||
optOutMuScopeIds: [ "http://redpencil.data.gift/id/concept/muScope/deltas/initialSync" ]
|
||||
}
|
||||
}
|
||||
/*
|
||||
Commenting ldes rules until ready to go to qa/prod. In the meantime, we override the configuration on dev.
|
||||
{
|
||||
match: {
|
||||
graph: {
|
||||
type: 'uri',
|
||||
value: 'http://mu.semte.ch/graphs/shared',
|
||||
}
|
||||
},
|
||||
callback: {
|
||||
url: 'http://ldes-delta-pusher/publish',
|
||||
method: 'POST',
|
||||
},
|
||||
options: {
|
||||
resourceFormat: 'v0.0.1',
|
||||
gracePeriod: 1000,
|
||||
}
|
||||
},
|
||||
{
|
||||
match: {
|
||||
graph: {
|
||||
type: 'uri',
|
||||
value: 'http://mu.semte.ch/graphs/worship-service',
|
||||
}
|
||||
},
|
||||
callback: {
|
||||
url: 'http://ldes-delta-pusher/publish',
|
||||
method: 'POST',
|
||||
},
|
||||
options: {
|
||||
resourceFormat: 'v0.0.1',
|
||||
gracePeriod: 1000,
|
||||
}
|
||||
},
|
||||
{
|
||||
match: {
|
||||
graph: {
|
||||
type: 'uri',
|
||||
value: 'http://mu.semte.ch/graphs/administrative-unit',
|
||||
}
|
||||
},
|
||||
callback: {
|
||||
url: 'http://ldes-delta-pusher/publish',
|
||||
method: 'POST',
|
||||
},
|
||||
options: {
|
||||
resourceFormat: 'v0.0.1',
|
||||
gracePeriod: 1000,
|
||||
}
|
||||
}
|
||||
*/
|
||||
]
|
||||
|
||||
@@ -0,0 +1,38 @@
|
||||
PREFIX mandaat: <http://data.vlaanderen.be/ns/mandaat#>
|
||||
PREFIX org: <http://www.w3.org/ns/org#>
|
||||
|
||||
DELETE {
|
||||
GRAPH ?g {
|
||||
?mandaat ?pmandaat ?omandaat .
|
||||
}
|
||||
} WHERE {
|
||||
VALUES ?g {
|
||||
<http://mu.semte.ch/graphs/worship-service>
|
||||
<http://mu.semte.ch/graphs/administrative-unit>
|
||||
}
|
||||
|
||||
GRAPH ?g {
|
||||
?mandaat mandaat:isBestuurlijkeAliasVan ?person ;
|
||||
?pmandaat ?omandaat .
|
||||
}
|
||||
|
||||
FILTER NOT EXISTS { ?person ?pperson ?operson . }
|
||||
}
|
||||
;
|
||||
DELETE {
|
||||
GRAPH ?g {
|
||||
?mandaat ?pmandaat ?omandaat .
|
||||
}
|
||||
} WHERE {
|
||||
VALUES ?g {
|
||||
<http://mu.semte.ch/graphs/worship-service>
|
||||
<http://mu.semte.ch/graphs/administrative-unit>
|
||||
}
|
||||
|
||||
GRAPH ?g {
|
||||
?mandaat mandaat:start ?start ;
|
||||
?pmandaat ?omandaat .
|
||||
}
|
||||
|
||||
FILTER NOT EXISTS { ?mandaat a ?type . }
|
||||
}
|
||||
@@ -0,0 +1,200 @@
|
||||
PREFIX org: <http://www.w3.org/ns/org#>
|
||||
PREFIX locn: <http://www.w3.org/ns/locn#>
|
||||
PREFIX schema: <http://schema.org/>
|
||||
PREFIX regorg: <http://www.w3.org/ns/regorg#>
|
||||
PREFIX person: <http://www.w3.org/ns/person#>
|
||||
PREFIX vcard: <http://www.w3.org/2006/vcard/ns#>
|
||||
PREFIX dbpedia: <http://dbpedia.org/ontology/>
|
||||
PREFIX adms: <http://www.w3.org/ns/adms#>
|
||||
PREFIX euro: <http://data.europa.eu/m8g/>
|
||||
PREFIX prov: <http://www.w3.org/ns/prov#>
|
||||
PREFIX organisatie: <https://data.vlaanderen.be/ns/organisatie#>
|
||||
PREFIX persoon: <https://data.vlaanderen.be/ns/persoon#>
|
||||
PREFIX adres: <https://data.vlaanderen.be/ns/adres#>
|
||||
PREFIX generiek: <https://data.vlaanderen.be/ns/generiek#>
|
||||
PREFIX mandaat: <http://data.vlaanderen.be/ns/mandaat#>
|
||||
PREFIX besluit: <http://data.vlaanderen.be/ns/besluit#>
|
||||
PREFIX lblodlg: <http://data.lblod.info/vocabularies/leidinggevenden/>
|
||||
PREFIX lblodorg: <https://data.lblod.info/vocabularies/organisatie/>
|
||||
PREFIX lblodgeneriek: <https://data.lblod.info/vocabularies/generiek/>
|
||||
PREFIX dc_terms: <http://purl.org/dc/terms/>
|
||||
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
|
||||
PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
|
||||
PREFIX euvoc: <http://publications.europa.eu/ontology/euvoc#>
|
||||
PREFIX ere: <http://data.lblod.info/vocabularies/erediensten/>
|
||||
PREFIX ch: <http://data.lblod.info/vocabularies/contacthub/>
|
||||
PREFIX code: <http://lblod.data.gift/vocabularies/organisatie/>
|
||||
PREFIX ext: <http://mu.semte.ch/vocabularies/ext/>
|
||||
PREFIX geo: <http://www.opengis.net/ont/geosparql#>
|
||||
PREFIX nacebel: <http://data.gift/vocabularies/nace-bel/>
|
||||
PREFIX core: <http://mu.semte.ch/vocabularies/core/>
|
||||
|
||||
# Core data
|
||||
INSERT DATA {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
<http://data.lblod.info/id/bestuurseenheden/7d1254994765887e47ee3c9a2551f6a790a02a1747809285f52e7e690c12f2ca> core:uuid """7d1254994765887e47ee3c9a2551f6a790a02a1747809285f52e7e690c12f2ca""".
|
||||
<http://data.lblod.info/id/bestuurseenheden/7d1254994765887e47ee3c9a2551f6a790a02a1747809285f52e7e690c12f2ca> a besluit:Bestuurseenheid.
|
||||
<http://data.lblod.info/id/bestuurseenheden/7d1254994765887e47ee3c9a2551f6a790a02a1747809285f52e7e690c12f2ca> a org:Organization.
|
||||
<http://data.lblod.info/id/bestuurseenheden/7d1254994765887e47ee3c9a2551f6a790a02a1747809285f52e7e690c12f2ca> a dc_terms:Agent.
|
||||
<http://data.lblod.info/id/bestuurseenheden/7d1254994765887e47ee3c9a2551f6a790a02a1747809285f52e7e690c12f2ca> skos:prefLabel """VERENIGING OCMW-WIELTJESGRACHT""".
|
||||
|
||||
<http://data.lblod.info/id/bestuurseenheden/7d1254994765887e47ee3c9a2551f6a790a02a1747809285f52e7e690c12f2ca> org:classification <http://data.vlaanderen.be/id/concept/BestuurseenheidClassificatieCode/e8294b73-87c9-4fa2-9441-1937350763c9>.
|
||||
|
||||
# Site
|
||||
<http://data.lblod.info/id/contact-punten/6585490A8CEC3153DEA3A208> core:uuid """6585490A8CEC3153DEA3A208""" .
|
||||
<http://data.lblod.info/id/contact-punten/6585490A8CEC3153DEA3A208> a schema:ContactPoint .
|
||||
<http://data.lblod.info/id/contact-punten/6585490A8CEC3153DEA3A208> schema:email """mail@adres.com""" .
|
||||
<http://data.lblod.info/id/contact-punten/6585490A8CEC3153DEA3A208> schema:telephone """tel:+3211211430""" .
|
||||
<http://data.lblod.info/id/contact-punten/6585490A8CEC3153DEA3A208> foaf:page """https://www.vlaanderen.be""" .
|
||||
<http://data.lblod.info/id/contact-punten/6585490A8CEC3153DEA3A208> schema:contactType """Primary""" .
|
||||
|
||||
<http://data.lblod.info/id/contact-punten/6585490B8CEC3153DEA3A209> core:uuid """6585490B8CEC3153DEA3A209""" .
|
||||
<http://data.lblod.info/id/contact-punten/6585490B8CEC3153DEA3A209> a schema:ContactPoint .
|
||||
<http://data.lblod.info/id/contact-punten/6585490B8CEC3153DEA3A209> schema:telephone """tel:+3211211431""" .
|
||||
<http://data.lblod.info/id/contact-punten/6585490B8CEC3153DEA3A209> schema:contactType """Secondary""" .
|
||||
|
||||
<http://data.lblod.info/id/adressen/6585490B8CEC3153DEA3A20A> core:uuid """6585490B8CEC3153DEA3A20A""" .
|
||||
<http://data.lblod.info/id/adressen/6585490B8CEC3153DEA3A20A> a locn:Address .
|
||||
<http://data.lblod.info/id/adressen/6585490B8CEC3153DEA3A20A> adres:Adresvoorstelling.huisnummer """1""" .
|
||||
<http://data.lblod.info/id/adressen/6585490B8CEC3153DEA3A20A> locn:thoroughfare """Oude Markt""" .
|
||||
<http://data.lblod.info/id/adressen/6585490B8CEC3153DEA3A20A> locn:postCode """3000""" .
|
||||
<http://data.lblod.info/id/adressen/6585490B8CEC3153DEA3A20A> adres:gemeentenaam """Leuven""" .
|
||||
<http://data.lblod.info/id/adressen/6585490B8CEC3153DEA3A20A> locn:adminUnitL2 """Vlaams-Brabant""" .
|
||||
<http://data.lblod.info/id/adressen/6585490B8CEC3153DEA3A20A> adres:land """België""" .
|
||||
<http://data.lblod.info/id/adressen/6585490B8CEC3153DEA3A20A> locn:fullAddress """Oude Markt 1, 3000 Leuven, België""" .
|
||||
<http://data.lblod.info/id/adressen/6585490B8CEC3153DEA3A20A> adres:verwijstNaar <https://data.vlaanderen.be/id/adres/294733> .
|
||||
<http://data.lblod.info/id/adressen/6585490B8CEC3153DEA3A20A> dc_terms:source <http://lblod.data.gift/concepts/e59c97a9-4e95-4d65-9696-756de47fbc1f> .
|
||||
|
||||
<http://data.lblod.info/id/vestigingen/6585490B8CEC3153DEA3A20B> core:uuid """6585490B8CEC3153DEA3A20B""" .
|
||||
<http://data.lblod.info/id/vestigingen/6585490B8CEC3153DEA3A20B> a org:Site .
|
||||
<http://data.lblod.info/id/vestigingen/6585490B8CEC3153DEA3A20B> organisatie:bestaatUit <http://data.lblod.info/id/adressen/6585490B8CEC3153DEA3A20A> .
|
||||
<http://data.lblod.info/id/vestigingen/6585490B8CEC3153DEA3A20B> org:siteAddress <http://data.lblod.info/id/contact-punten/6585490A8CEC3153DEA3A208> .
|
||||
<http://data.lblod.info/id/vestigingen/6585490B8CEC3153DEA3A20B> org:siteAddress <http://data.lblod.info/id/contact-punten/6585490B8CEC3153DEA3A209> .
|
||||
<http://data.lblod.info/id/vestigingen/6585490B8CEC3153DEA3A20B> ere:vestigingstype <http://lblod.data.gift/concepts/f1381723dec42c0b6ba6492e41d6f5dd> .
|
||||
<http://data.lblod.info/id/bestuurseenheden/7d1254994765887e47ee3c9a2551f6a790a02a1747809285f52e7e690c12f2ca> org:hasPrimarySite <http://data.lblod.info/id/vestigingen/6585490B8CEC3153DEA3A20B> .
|
||||
|
||||
# KBO number
|
||||
<http://data.lblod.info/id/gestructureerdeIdentificatoren/65856287B12D00C739F23920> core:uuid """65856287B12D00C739F23920""".
|
||||
<http://data.lblod.info/id/gestructureerdeIdentificatoren/65856287B12D00C739F23920> a generiek:GestructureerdeIdentificator.
|
||||
<http://data.lblod.info/id/gestructureerdeIdentificatoren/65856287B12D00C739F23920> generiek:lokaleIdentificator """0262925527""".
|
||||
<http://data.lblod.info/id/identificatoren/65856287B12D00C739F23921> core:uuid """65856287B12D00C739F23921""".
|
||||
<http://data.lblod.info/id/identificatoren/65856287B12D00C739F23921> a adms:Identifier.
|
||||
<http://data.lblod.info/id/identificatoren/65856287B12D00C739F23921> skos:notation """KBO nummer""".
|
||||
<http://data.lblod.info/id/identificatoren/65856287B12D00C739F23921> generiek:gestructureerdeIdentificator <http://data.lblod.info/id/gestructureerdeIdentificatoren/65856287B12D00C739F23920>.
|
||||
<http://data.lblod.info/id/bestuurseenheden/7d1254994765887e47ee3c9a2551f6a790a02a1747809285f52e7e690c12f2ca> adms:identifier <http://data.lblod.info/id/identificatoren/65856287B12D00C739F23921>.
|
||||
|
||||
# Sharepoint identifier
|
||||
<http://data.lblod.info/id/gestructureerdeIdentificatoren/65856287B12D00C739F23922> core:uuid """65856287B12D00C739F23922""".
|
||||
<http://data.lblod.info/id/gestructureerdeIdentificatoren/65856287B12D00C739F23922> a generiek:GestructureerdeIdentificator.
|
||||
<http://data.lblod.info/id/gestructureerdeIdentificatoren/65856287B12D00C739F23922> generiek:lokaleIdentificator """sp-id-test""" .
|
||||
<http://data.lblod.info/id/identificatoren/65856287B12D00C739F23923> core:uuid """65856287B12D00C739F23923""".
|
||||
<http://data.lblod.info/id/identificatoren/65856287B12D00C739F23923> a adms:Identifier.
|
||||
<http://data.lblod.info/id/identificatoren/65856287B12D00C739F23923> skos:notation """SharePoint identificator""".
|
||||
<http://data.lblod.info/id/identificatoren/65856287B12D00C739F23923> generiek:gestructureerdeIdentificator <http://data.lblod.info/id/gestructureerdeIdentificatoren/65856287B12D00C739F23922> .
|
||||
<http://data.lblod.info/id/bestuurseenheden/7d1254994765887e47ee3c9a2551f6a790a02a1747809285f52e7e690c12f2ca> adms:identifier <http://data.lblod.info/id/identificatoren/65856287B12D00C739F23923> .
|
||||
|
||||
# OVO number
|
||||
<http://data.lblod.info/id/bestuurseenheden/7d1254994765887e47ee3c9a2551f6a790a02a1747809285f52e7e690c12f2ca> adms:identifier <http://data.lblod.info/id/identificatoren/d5713a51-40d4-4b79-bf72-0d917f78c37b> .
|
||||
<http://data.lblod.info/id/identificatoren/d5713a51-40d4-4b79-bf72-0d917f78c37b> a adms:Identifier ;
|
||||
core:uuid """d5713a51-40d4-4b79-bf72-0d917f78c37b""" ;
|
||||
skos:notation "OVO-nummer" ;
|
||||
generiek:gestructureerdeIdentificator <http://data.lblod.info/id/gestructureerdeIdentificatoren/438b542b-6841-4137-b8da-287b394328ee> .
|
||||
<http://data.lblod.info/id/gestructureerdeIdentificatoren/438b542b-6841-4137-b8da-287b394328ee> a generiek:GestructureerdeIdentificator ;
|
||||
core:uuid """438b542b-6841-4137-b8da-287b394328ee""" ;
|
||||
generiek:lokaleIdentificator "OVO009999" .
|
||||
|
||||
<http://data.lblod.info/id/bestuurseenheden/7d1254994765887e47ee3c9a2551f6a790a02a1747809285f52e7e690c12f2ca> besluit:werkingsgebied <http://data.lblod.info/id/werkingsgebieden/a8040e566e7a22dfc6a83a7176d105abc68ab1bf1a89e94a1333c8f049131837>.
|
||||
|
||||
<http://data.lblod.info/id/bestuurseenheden/7d1254994765887e47ee3c9a2551f6a790a02a1747809285f52e7e690c12f2ca> regorg:orgStatus <http://lblod.data.gift/concepts/63cc561de9188d64ba5840a42ae8f0d6>.
|
||||
|
||||
<http://data.lblod.info/id/bestuurseenheden/8a162fa437a54cb657b57514e4e0135ec106fce3206c29cd2f90b1859ed90dab> org:hasSubOrganization <http://data.lblod.info/id/bestuurseenheden/7d1254994765887e47ee3c9a2551f6a790a02a1747809285f52e7e690c12f2ca>.
|
||||
|
||||
<http://data.lblod.info/id/bestuurseenheden/8a162fa437a54cb657b57514e4e0135ec106fce3206c29cd2f90b1859ed90dab> ext:isFounderOfOrganization <http://data.lblod.info/id/bestuurseenheden/7d1254994765887e47ee3c9a2551f6a790a02a1747809285f52e7e690c12f2ca>.
|
||||
}
|
||||
}
|
||||
;
|
||||
INSERT {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
<http://data.lblod.info/id/bestuursorganen/16875d1ad2294295c576de9837756a4c6796d3ee7e0b7ebd6e8d3e8f65930353> a besluit:Bestuursorgaan ;
|
||||
core:uuid """16875d1ad2294295c576de9837756a4c6796d3ee7e0b7ebd6e8d3e8f65930353""" ;
|
||||
skos:prefLabel ?governingBodyLabel ;
|
||||
besluit:bestuurt <http://data.lblod.info/id/bestuurseenheden/7d1254994765887e47ee3c9a2551f6a790a02a1747809285f52e7e690c12f2ca> ;
|
||||
org:classification <http://data.vlaanderen.be/id/concept/BestuursorgaanClassificatieCode/013cc838-173a-4657-b1ae-b00c048df943> .
|
||||
}
|
||||
} WHERE {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?administrativeUnit core:uuid """7d1254994765887e47ee3c9a2551f6a790a02a1747809285f52e7e690c12f2ca""" ;
|
||||
skos:prefLabel ?administrativeUnitLabel .
|
||||
BIND(CONCAT("""Raad van bestuur""", " ", ?administrativeUnitLabel) as ?governingBodyLabel)
|
||||
}
|
||||
}
|
||||
;
|
||||
INSERT DATA {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
<http://data.lblod.info/id/bestuursorganen/47e52223b3e27ad63c7233f93df0331f6d45bfb743f81d1110cbca4b3ac933ee> a besluit:Bestuursorgaan ;
|
||||
core:uuid """47e52223b3e27ad63c7233f93df0331f6d45bfb743f81d1110cbca4b3ac933ee""" ;
|
||||
generiek:isTijdspecialisatieVan <http://data.lblod.info/id/bestuursorganen/16875d1ad2294295c576de9837756a4c6796d3ee7e0b7ebd6e8d3e8f65930353> ;
|
||||
mandaat:bindingStart "1971-11-03T00:00:00.000Z"^^xsd:dateTime .
|
||||
}
|
||||
}
|
||||
;
|
||||
INSERT {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
<http://data.lblod.info/id/bestuursorganen/e891dc823e0d924a94cd067d0b291c169c95695cdd73a3c259e79c39e91d0034> a besluit:Bestuursorgaan ;
|
||||
core:uuid """e891dc823e0d924a94cd067d0b291c169c95695cdd73a3c259e79c39e91d0034""" ;
|
||||
skos:prefLabel ?governingBodyLabel ;
|
||||
besluit:bestuurt <http://data.lblod.info/id/bestuurseenheden/7d1254994765887e47ee3c9a2551f6a790a02a1747809285f52e7e690c12f2ca> ;
|
||||
org:classification <http://data.vlaanderen.be/id/concept/BestuursorgaanClassificatieCode/b52094ff-21a2-4da8-8dbe-f513365d1528> .
|
||||
}
|
||||
} WHERE {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?administrativeUnit core:uuid """7d1254994765887e47ee3c9a2551f6a790a02a1747809285f52e7e690c12f2ca""" ;
|
||||
skos:prefLabel ?administrativeUnitLabel .
|
||||
BIND(CONCAT("""Algemene vergadering""", " ", ?administrativeUnitLabel) as ?governingBodyLabel)
|
||||
}
|
||||
}
|
||||
;
|
||||
INSERT DATA {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
<http://data.lblod.info/id/bestuursorganen/be22b1988874583b0773677665596200c9586f758207cdf335278a9380180d86> a besluit:Bestuursorgaan ;
|
||||
core:uuid """be22b1988874583b0773677665596200c9586f758207cdf335278a9380180d86""" ;
|
||||
generiek:isTijdspecialisatieVan <http://data.lblod.info/id/bestuursorganen/e891dc823e0d924a94cd067d0b291c169c95695cdd73a3c259e79c39e91d0034> ;
|
||||
mandaat:bindingStart "1971-11-03T00:00:00.000Z"^^xsd:dateTime .
|
||||
}
|
||||
}
|
||||
;
|
||||
INSERT {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
<http://data.lblod.info/id/bestuursorganen/0f87572fb2968c17383dc7574320031dffa339f17a974e3b194588d685c1fc5d> a besluit:Bestuursorgaan ;
|
||||
core:uuid """0f87572fb2968c17383dc7574320031dffa339f17a974e3b194588d685c1fc5d""" ;
|
||||
skos:prefLabel ?governingBodyLabel ;
|
||||
besluit:bestuurt <http://data.lblod.info/id/bestuurseenheden/7d1254994765887e47ee3c9a2551f6a790a02a1747809285f52e7e690c12f2ca> ;
|
||||
org:classification <http://data.vlaanderen.be/id/concept/BestuursorgaanClassificatieCode/41caf7e6-b040-4720-9cc2-a96cfffed5b4> .
|
||||
}
|
||||
} WHERE {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?administrativeUnit core:uuid """7d1254994765887e47ee3c9a2551f6a790a02a1747809285f52e7e690c12f2ca""" ;
|
||||
skos:prefLabel ?administrativeUnitLabel .
|
||||
BIND(CONCAT("""Leidend Ambtenaar""", " ", ?administrativeUnitLabel) as ?governingBodyLabel)
|
||||
}
|
||||
}
|
||||
;
|
||||
INSERT DATA {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
<http://data.lblod.info/id/bestuursorganen/a48a21167ca609b76d621be5d5714e28f48711f1eb49d704985d1476565fdd66> a besluit:Bestuursorgaan ;
|
||||
core:uuid """a48a21167ca609b76d621be5d5714e28f48711f1eb49d704985d1476565fdd66""" ;
|
||||
generiek:isTijdspecialisatieVan <http://data.lblod.info/id/bestuursorganen/0f87572fb2968c17383dc7574320031dffa339f17a974e3b194588d685c1fc5d> ;
|
||||
mandaat:bindingStart "2019-01-01T00:00:00.000Z"^^xsd:dateTime .
|
||||
}
|
||||
}
|
||||
;
|
||||
INSERT DATA {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
<http://data.lblod.info/id/bestuursorganen/a48a21167ca609b76d621be5d5714e28f48711f1eb49d704985d1476565fdd66> lblodlg:heeftBestuursfunctie <http://data.lblod.info/id/bestuursfuncties/73e7ef49c748e7f475feb952355f4a6bee2db1d85cd30b17b722a6291739b490> .
|
||||
|
||||
<http://data.lblod.info/id/bestuursfuncties/73e7ef49c748e7f475feb952355f4a6bee2db1d85cd30b17b722a6291739b490> a lblodlg:Bestuursfunctie ;
|
||||
core:uuid """73e7ef49c748e7f475feb952355f4a6bee2db1d85cd30b17b722a6291739b490""" ;
|
||||
org:role <http://data.vlaanderen.be/id/concept/BestuursfunctieCode/855489b9-b584-4f34-90b2-39aea808cd9f> ;
|
||||
skos:prefLabel """VERENIGING OCMW-WIELTJESGRACHT Leidend ambtenaar""" .
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,199 @@
|
||||
PREFIX org: <http://www.w3.org/ns/org#>
|
||||
PREFIX locn: <http://www.w3.org/ns/locn#>
|
||||
PREFIX schema: <http://schema.org/>
|
||||
PREFIX regorg: <http://www.w3.org/ns/regorg#>
|
||||
PREFIX person: <http://www.w3.org/ns/person#>
|
||||
PREFIX vcard: <http://www.w3.org/2006/vcard/ns#>
|
||||
PREFIX dbpedia: <http://dbpedia.org/ontology/>
|
||||
PREFIX adms: <http://www.w3.org/ns/adms#>
|
||||
PREFIX euro: <http://data.europa.eu/m8g/>
|
||||
PREFIX prov: <http://www.w3.org/ns/prov#>
|
||||
PREFIX organisatie: <https://data.vlaanderen.be/ns/organisatie#>
|
||||
PREFIX persoon: <https://data.vlaanderen.be/ns/persoon#>
|
||||
PREFIX adres: <https://data.vlaanderen.be/ns/adres#>
|
||||
PREFIX generiek: <https://data.vlaanderen.be/ns/generiek#>
|
||||
PREFIX mandaat: <http://data.vlaanderen.be/ns/mandaat#>
|
||||
PREFIX besluit: <http://data.vlaanderen.be/ns/besluit#>
|
||||
PREFIX lblodlg: <http://data.lblod.info/vocabularies/leidinggevenden/>
|
||||
PREFIX lblodorg: <https://data.lblod.info/vocabularies/organisatie/>
|
||||
PREFIX lblodgeneriek: <https://data.lblod.info/vocabularies/generiek/>
|
||||
PREFIX dc_terms: <http://purl.org/dc/terms/>
|
||||
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
|
||||
PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
|
||||
PREFIX euvoc: <http://publications.europa.eu/ontology/euvoc#>
|
||||
PREFIX ere: <http://data.lblod.info/vocabularies/erediensten/>
|
||||
PREFIX ch: <http://data.lblod.info/vocabularies/contacthub/>
|
||||
PREFIX code: <http://lblod.data.gift/vocabularies/organisatie/>
|
||||
PREFIX ext: <http://mu.semte.ch/vocabularies/ext/>
|
||||
PREFIX geo: <http://www.opengis.net/ont/geosparql#>
|
||||
PREFIX nacebel: <http://data.gift/vocabularies/nace-bel/>
|
||||
PREFIX core: <http://mu.semte.ch/vocabularies/core/>
|
||||
|
||||
DELETE {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
<http://data.lblod.info/id/bestuursorganen/0f87572fb2968c17383dc7574320031dffa339f17a974e3b194588d685c1fc5d> a besluit:Bestuursorgaan ;
|
||||
core:uuid """0f87572fb2968c17383dc7574320031dffa339f17a974e3b194588d685c1fc5d""" ;
|
||||
skos:prefLabel ?governingBodyLabel ;
|
||||
besluit:bestuurt <http://data.lblod.info/id/bestuurseenheden/7d1254994765887e47ee3c9a2551f6a790a02a1747809285f52e7e690c12f2ca> ;
|
||||
org:classification <http://data.vlaanderen.be/id/concept/BestuursorgaanClassificatieCode/41caf7e6-b040-4720-9cc2-a96cfffed5b4> .
|
||||
}
|
||||
} WHERE {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?administrativeUnit core:uuid """7d1254994765887e47ee3c9a2551f6a790a02a1747809285f52e7e690c12f2ca""" ;
|
||||
skos:prefLabel ?administrativeUnitLabel .
|
||||
BIND(CONCAT("""Leidend Ambtenaar""", " ", ?administrativeUnitLabel) as ?governingBodyLabel)
|
||||
}
|
||||
}
|
||||
;
|
||||
DELETE {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
<http://data.lblod.info/id/bestuursorganen/e891dc823e0d924a94cd067d0b291c169c95695cdd73a3c259e79c39e91d0034> a besluit:Bestuursorgaan ;
|
||||
core:uuid """e891dc823e0d924a94cd067d0b291c169c95695cdd73a3c259e79c39e91d0034""" ;
|
||||
skos:prefLabel ?governingBodyLabel ;
|
||||
besluit:bestuurt <http://data.lblod.info/id/bestuurseenheden/7d1254994765887e47ee3c9a2551f6a790a02a1747809285f52e7e690c12f2ca> ;
|
||||
org:classification <http://data.vlaanderen.be/id/concept/BestuursorgaanClassificatieCode/b52094ff-21a2-4da8-8dbe-f513365d1528> .
|
||||
}
|
||||
} WHERE {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?administrativeUnit core:uuid """7d1254994765887e47ee3c9a2551f6a790a02a1747809285f52e7e690c12f2ca""" ;
|
||||
skos:prefLabel ?administrativeUnitLabel .
|
||||
BIND(CONCAT("""Algemene vergadering""", " ", ?administrativeUnitLabel) as ?governingBodyLabel)
|
||||
}
|
||||
}
|
||||
;
|
||||
DELETE {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
<http://data.lblod.info/id/bestuursorganen/16875d1ad2294295c576de9837756a4c6796d3ee7e0b7ebd6e8d3e8f65930353> a besluit:Bestuursorgaan ;
|
||||
core:uuid """16875d1ad2294295c576de9837756a4c6796d3ee7e0b7ebd6e8d3e8f65930353""" ;
|
||||
skos:prefLabel ?governingBodyLabel ;
|
||||
besluit:bestuurt <http://data.lblod.info/id/bestuurseenheden/7d1254994765887e47ee3c9a2551f6a790a02a1747809285f52e7e690c12f2ca> ;
|
||||
org:classification <http://data.vlaanderen.be/id/concept/BestuursorgaanClassificatieCode/013cc838-173a-4657-b1ae-b00c048df943> .
|
||||
}
|
||||
} WHERE {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?administrativeUnit core:uuid """7d1254994765887e47ee3c9a2551f6a790a02a1747809285f52e7e690c12f2ca""" ;
|
||||
skos:prefLabel ?administrativeUnitLabel .
|
||||
BIND(CONCAT("""Raad van bestuur""", " ", ?administrativeUnitLabel) as ?governingBodyLabel)
|
||||
}
|
||||
}
|
||||
;
|
||||
DELETE DATA {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
<http://data.lblod.info/id/bestuurseenheden/7d1254994765887e47ee3c9a2551f6a790a02a1747809285f52e7e690c12f2ca> core:uuid """7d1254994765887e47ee3c9a2551f6a790a02a1747809285f52e7e690c12f2ca""".
|
||||
<http://data.lblod.info/id/bestuurseenheden/7d1254994765887e47ee3c9a2551f6a790a02a1747809285f52e7e690c12f2ca> a besluit:Bestuurseenheid.
|
||||
<http://data.lblod.info/id/bestuurseenheden/7d1254994765887e47ee3c9a2551f6a790a02a1747809285f52e7e690c12f2ca> a org:Organization.
|
||||
<http://data.lblod.info/id/bestuurseenheden/7d1254994765887e47ee3c9a2551f6a790a02a1747809285f52e7e690c12f2ca> a dc_terms:Agent.
|
||||
<http://data.lblod.info/id/bestuurseenheden/7d1254994765887e47ee3c9a2551f6a790a02a1747809285f52e7e690c12f2ca> skos:prefLabel """VERENIGING OCMW-WIELTJESGRACHT""".
|
||||
|
||||
<http://data.lblod.info/id/bestuurseenheden/7d1254994765887e47ee3c9a2551f6a790a02a1747809285f52e7e690c12f2ca> org:classification <http://data.vlaanderen.be/id/concept/BestuurseenheidClassificatieCode/e8294b73-87c9-4fa2-9441-1937350763c9>.
|
||||
|
||||
# Site
|
||||
<http://data.lblod.info/id/contact-punten/6585490A8CEC3153DEA3A208> core:uuid """6585490A8CEC3153DEA3A208""" .
|
||||
<http://data.lblod.info/id/contact-punten/6585490A8CEC3153DEA3A208> a schema:ContactPoint .
|
||||
<http://data.lblod.info/id/contact-punten/6585490A8CEC3153DEA3A208> schema:email """mail@adres.com""" .
|
||||
<http://data.lblod.info/id/contact-punten/6585490A8CEC3153DEA3A208> schema:telephone """tel:+3211211430""" .
|
||||
<http://data.lblod.info/id/contact-punten/6585490A8CEC3153DEA3A208> foaf:page """https://www.vlaanderen.be""" .
|
||||
<http://data.lblod.info/id/contact-punten/6585490A8CEC3153DEA3A208> schema:contactType """Primary""" .
|
||||
|
||||
<http://data.lblod.info/id/contact-punten/6585490B8CEC3153DEA3A209> core:uuid """6585490B8CEC3153DEA3A209""" .
|
||||
<http://data.lblod.info/id/contact-punten/6585490B8CEC3153DEA3A209> a schema:ContactPoint .
|
||||
<http://data.lblod.info/id/contact-punten/6585490B8CEC3153DEA3A209> schema:telephone """tel:+3211211431""" .
|
||||
<http://data.lblod.info/id/contact-punten/6585490B8CEC3153DEA3A209> schema:contactType """Secondary""" .
|
||||
|
||||
<http://data.lblod.info/id/adressen/6585490B8CEC3153DEA3A20A> core:uuid """6585490B8CEC3153DEA3A20A""" .
|
||||
<http://data.lblod.info/id/adressen/6585490B8CEC3153DEA3A20A> a locn:Address .
|
||||
<http://data.lblod.info/id/adressen/6585490B8CEC3153DEA3A20A> adres:Adresvoorstelling.huisnummer """1""" .
|
||||
<http://data.lblod.info/id/adressen/6585490B8CEC3153DEA3A20A> locn:thoroughfare """Oude Markt""" .
|
||||
<http://data.lblod.info/id/adressen/6585490B8CEC3153DEA3A20A> locn:postCode """3000""" .
|
||||
<http://data.lblod.info/id/adressen/6585490B8CEC3153DEA3A20A> adres:gemeentenaam """Leuven""" .
|
||||
<http://data.lblod.info/id/adressen/6585490B8CEC3153DEA3A20A> locn:adminUnitL2 """Vlaams-Brabant""" .
|
||||
<http://data.lblod.info/id/adressen/6585490B8CEC3153DEA3A20A> adres:land """België""" .
|
||||
<http://data.lblod.info/id/adressen/6585490B8CEC3153DEA3A20A> locn:fullAddress """Oude Markt 1, 3000 Leuven, België""" .
|
||||
<http://data.lblod.info/id/adressen/6585490B8CEC3153DEA3A20A> adres:verwijstNaar <https://data.vlaanderen.be/id/adres/294733> .
|
||||
<http://data.lblod.info/id/adressen/6585490B8CEC3153DEA3A20A> dc_terms:source <http://lblod.data.gift/concepts/e59c97a9-4e95-4d65-9696-756de47fbc1f> .
|
||||
|
||||
<http://data.lblod.info/id/vestigingen/6585490B8CEC3153DEA3A20B> core:uuid """6585490B8CEC3153DEA3A20B""" .
|
||||
<http://data.lblod.info/id/vestigingen/6585490B8CEC3153DEA3A20B> a org:Site .
|
||||
<http://data.lblod.info/id/vestigingen/6585490B8CEC3153DEA3A20B> organisatie:bestaatUit <http://data.lblod.info/id/adressen/6585490B8CEC3153DEA3A20A> .
|
||||
<http://data.lblod.info/id/vestigingen/6585490B8CEC3153DEA3A20B> org:siteAddress <http://data.lblod.info/id/contact-punten/6585490A8CEC3153DEA3A208> .
|
||||
<http://data.lblod.info/id/vestigingen/6585490B8CEC3153DEA3A20B> org:siteAddress <http://data.lblod.info/id/contact-punten/6585490B8CEC3153DEA3A209> .
|
||||
<http://data.lblod.info/id/vestigingen/6585490B8CEC3153DEA3A20B> ere:vestigingstype <http://lblod.data.gift/concepts/f1381723dec42c0b6ba6492e41d6f5dd> .
|
||||
<http://data.lblod.info/id/bestuurseenheden/7d1254994765887e47ee3c9a2551f6a790a02a1747809285f52e7e690c12f2ca> org:hasPrimarySite <http://data.lblod.info/id/vestigingen/6585490B8CEC3153DEA3A20B> .
|
||||
|
||||
# KBO number
|
||||
<http://data.lblod.info/id/gestructureerdeIdentificatoren/65856287B12D00C739F23920> core:uuid """65856287B12D00C739F23920""".
|
||||
<http://data.lblod.info/id/gestructureerdeIdentificatoren/65856287B12D00C739F23920> a generiek:GestructureerdeIdentificator.
|
||||
<http://data.lblod.info/id/gestructureerdeIdentificatoren/65856287B12D00C739F23920> generiek:lokaleIdentificator """0262925527""".
|
||||
<http://data.lblod.info/id/identificatoren/65856287B12D00C739F23921> core:uuid """65856287B12D00C739F23921""".
|
||||
<http://data.lblod.info/id/identificatoren/65856287B12D00C739F23921> a adms:Identifier.
|
||||
<http://data.lblod.info/id/identificatoren/65856287B12D00C739F23921> skos:notation """KBO nummer""".
|
||||
<http://data.lblod.info/id/identificatoren/65856287B12D00C739F23921> generiek:gestructureerdeIdentificator <http://data.lblod.info/id/gestructureerdeIdentificatoren/65856287B12D00C739F23920>.
|
||||
<http://data.lblod.info/id/bestuurseenheden/7d1254994765887e47ee3c9a2551f6a790a02a1747809285f52e7e690c12f2ca> adms:identifier <http://data.lblod.info/id/identificatoren/65856287B12D00C739F23921>.
|
||||
|
||||
# Sharepoint identifier
|
||||
<http://data.lblod.info/id/gestructureerdeIdentificatoren/65856287B12D00C739F23922> core:uuid """65856287B12D00C739F23922""".
|
||||
<http://data.lblod.info/id/gestructureerdeIdentificatoren/65856287B12D00C739F23922> a generiek:GestructureerdeIdentificator.
|
||||
<http://data.lblod.info/id/gestructureerdeIdentificatoren/65856287B12D00C739F23922> generiek:lokaleIdentificator """sp-id-test""" .
|
||||
<http://data.lblod.info/id/identificatoren/65856287B12D00C739F23923> core:uuid """65856287B12D00C739F23923""".
|
||||
<http://data.lblod.info/id/identificatoren/65856287B12D00C739F23923> a adms:Identifier.
|
||||
<http://data.lblod.info/id/identificatoren/65856287B12D00C739F23923> skos:notation """SharePoint identificator""".
|
||||
<http://data.lblod.info/id/identificatoren/65856287B12D00C739F23923> generiek:gestructureerdeIdentificator <http://data.lblod.info/id/gestructureerdeIdentificatoren/65856287B12D00C739F23922> .
|
||||
<http://data.lblod.info/id/bestuurseenheden/7d1254994765887e47ee3c9a2551f6a790a02a1747809285f52e7e690c12f2ca> adms:identifier <http://data.lblod.info/id/identificatoren/65856287B12D00C739F23923> .
|
||||
|
||||
# OVO number
|
||||
<http://data.lblod.info/id/bestuurseenheden/7d1254994765887e47ee3c9a2551f6a790a02a1747809285f52e7e690c12f2ca> adms:identifier <http://data.lblod.info/id/identificatoren/d5713a51-40d4-4b79-bf72-0d917f78c37b> .
|
||||
<http://data.lblod.info/id/identificatoren/d5713a51-40d4-4b79-bf72-0d917f78c37b> a adms:Identifier ;
|
||||
core:uuid """d5713a51-40d4-4b79-bf72-0d917f78c37b""" ;
|
||||
skos:notation "OVO-nummer" ;
|
||||
generiek:gestructureerdeIdentificator <http://data.lblod.info/id/gestructureerdeIdentificatoren/438b542b-6841-4137-b8da-287b394328ee> .
|
||||
<http://data.lblod.info/id/gestructureerdeIdentificatoren/438b542b-6841-4137-b8da-287b394328ee> a generiek:GestructureerdeIdentificator ;
|
||||
core:uuid """438b542b-6841-4137-b8da-287b394328ee""" ;
|
||||
generiek:lokaleIdentificator "OVO009999" .
|
||||
|
||||
<http://data.lblod.info/id/bestuurseenheden/7d1254994765887e47ee3c9a2551f6a790a02a1747809285f52e7e690c12f2ca> besluit:werkingsgebied <http://data.lblod.info/id/werkingsgebieden/a8040e566e7a22dfc6a83a7176d105abc68ab1bf1a89e94a1333c8f049131837>.
|
||||
|
||||
<http://data.lblod.info/id/bestuurseenheden/7d1254994765887e47ee3c9a2551f6a790a02a1747809285f52e7e690c12f2ca> regorg:orgStatus <http://lblod.data.gift/concepts/63cc561de9188d64ba5840a42ae8f0d6>.
|
||||
|
||||
<http://data.lblod.info/id/bestuurseenheden/8a162fa437a54cb657b57514e4e0135ec106fce3206c29cd2f90b1859ed90dab> org:hasSubOrganization <http://data.lblod.info/id/bestuurseenheden/7d1254994765887e47ee3c9a2551f6a790a02a1747809285f52e7e690c12f2ca>.
|
||||
|
||||
<http://data.lblod.info/id/bestuurseenheden/8a162fa437a54cb657b57514e4e0135ec106fce3206c29cd2f90b1859ed90dab> ext:isFounderOfOrganization <http://data.lblod.info/id/bestuurseenheden/7d1254994765887e47ee3c9a2551f6a790a02a1747809285f52e7e690c12f2ca>.
|
||||
}
|
||||
}
|
||||
;
|
||||
DELETE DATA {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
<http://data.lblod.info/id/bestuursorganen/47e52223b3e27ad63c7233f93df0331f6d45bfb743f81d1110cbca4b3ac933ee> a besluit:Bestuursorgaan ;
|
||||
core:uuid """47e52223b3e27ad63c7233f93df0331f6d45bfb743f81d1110cbca4b3ac933ee""" ;
|
||||
generiek:isTijdspecialisatieVan <http://data.lblod.info/id/bestuursorganen/16875d1ad2294295c576de9837756a4c6796d3ee7e0b7ebd6e8d3e8f65930353> ;
|
||||
mandaat:bindingStart "1971-11-03T00:00:00.000Z"^^xsd:dateTime .
|
||||
}
|
||||
}
|
||||
;
|
||||
DELETE DATA {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
<http://data.lblod.info/id/bestuursorganen/be22b1988874583b0773677665596200c9586f758207cdf335278a9380180d86> a besluit:Bestuursorgaan ;
|
||||
core:uuid """be22b1988874583b0773677665596200c9586f758207cdf335278a9380180d86""" ;
|
||||
generiek:isTijdspecialisatieVan <http://data.lblod.info/id/bestuursorganen/e891dc823e0d924a94cd067d0b291c169c95695cdd73a3c259e79c39e91d0034> ;
|
||||
mandaat:bindingStart "1971-11-03T00:00:00.000Z"^^xsd:dateTime .
|
||||
}
|
||||
}
|
||||
;
|
||||
DELETE DATA {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
<http://data.lblod.info/id/bestuursorganen/a48a21167ca609b76d621be5d5714e28f48711f1eb49d704985d1476565fdd66> a besluit:Bestuursorgaan ;
|
||||
core:uuid """a48a21167ca609b76d621be5d5714e28f48711f1eb49d704985d1476565fdd66""" ;
|
||||
generiek:isTijdspecialisatieVan <http://data.lblod.info/id/bestuursorganen/0f87572fb2968c17383dc7574320031dffa339f17a974e3b194588d685c1fc5d> ;
|
||||
mandaat:bindingStart "2019-01-01T00:00:00.000Z"^^xsd:dateTime .
|
||||
}
|
||||
}
|
||||
;
|
||||
DELETE DATA {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
<http://data.lblod.info/id/bestuursorganen/a48a21167ca609b76d621be5d5714e28f48711f1eb49d704985d1476565fdd66> lblodlg:heeftBestuursfunctie <http://data.lblod.info/id/bestuursfuncties/73e7ef49c748e7f475feb952355f4a6bee2db1d85cd30b17b722a6291739b490> .
|
||||
|
||||
<http://data.lblod.info/id/bestuursfuncties/73e7ef49c748e7f475feb952355f4a6bee2db1d85cd30b17b722a6291739b490> a lblodlg:Bestuursfunctie ;
|
||||
core:uuid """73e7ef49c748e7f475feb952355f4a6bee2db1d85cd30b17b722a6291739b490""" ;
|
||||
org:role <http://data.vlaanderen.be/id/concept/BestuursfunctieCode/855489b9-b584-4f34-90b2-39aea808cd9f> ;
|
||||
skos:prefLabel """VERENIGING OCMW-WIELTJESGRACHT Leidend ambtenaar""" .
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
PREFIX org: <http://www.w3.org/ns/org#>
|
||||
PREFIX ext: <http://mu.semte.ch/vocabularies/ext/>
|
||||
|
||||
DELETE {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?s ext:isFounderOfOrganization ?o .
|
||||
}
|
||||
} WHERE {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?s ext:isFounderOfOrganization ?o .
|
||||
?o org:classification ?class .
|
||||
|
||||
VALUES ?class {
|
||||
<http://data.vlaanderen.be/id/concept/BestuurseenheidClassificatieCode/e8294b73-87c9-4fa2-9441-1937350763c9> # Welzijnsvereniging
|
||||
<http://data.vlaanderen.be/id/concept/BestuurseenheidClassificatieCode/34b5af85-dc9f-468f-9e03-ef89b174c267> # Autonome verzorgingsinstelling
|
||||
}
|
||||
}
|
||||
}
|
||||
;
|
||||
DELETE {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?s org:hasSubOrganization ?o .
|
||||
}
|
||||
} WHERE {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?s org:hasSubOrganization ?o .
|
||||
?o org:classification ?class .
|
||||
|
||||
VALUES ?class {
|
||||
<http://data.vlaanderen.be/id/concept/BestuurseenheidClassificatieCode/e8294b73-87c9-4fa2-9441-1937350763c9> # Welzijnsvereniging
|
||||
<http://data.vlaanderen.be/id/concept/BestuurseenheidClassificatieCode/34b5af85-dc9f-468f-9e03-ef89b174c267> # Autonome verzorgingsinstelling
|
||||
}
|
||||
}
|
||||
}
|
||||
4
config/dev/tlsproxy/Caddyfile
Normal file
4
config/dev/tlsproxy/Caddyfile
Normal file
@@ -0,0 +1,4 @@
|
||||
{$SITE_ADDRESS}:443 {
|
||||
reverse_proxy identifier:80
|
||||
tls internal
|
||||
}
|
||||
@@ -60,8 +60,8 @@ defmodule Dispatcher do
|
||||
Proxy.forward conn, path, "http://cache/board-position-codes/"
|
||||
end
|
||||
|
||||
match "/agents/*path", %{ accept: [:json], layer: :api} do
|
||||
Proxy.forward conn, path, "http://cache/agents/"
|
||||
match "/functionaries/*path", %{ accept: [:json], layer: :api} do
|
||||
Proxy.forward conn, path, "http://cache/functionaries/"
|
||||
end
|
||||
|
||||
match "/agent-status-codes/*path", %{ accept: [:json], layer: :api} do
|
||||
@@ -76,20 +76,32 @@ defmodule Dispatcher do
|
||||
Proxy.forward conn, path, "http://cache/organizations/"
|
||||
end
|
||||
|
||||
match "/registered-organizations/*path", %{ accept: [:json], layer: :api} do
|
||||
Proxy.forward conn, path, "http://cache/registered-organizations/"
|
||||
end
|
||||
|
||||
match "/administrative-units/*path", %{ accept: [:json], layer: :api} do
|
||||
Proxy.forward conn, path, "http://resource/administrative-units/"
|
||||
Proxy.forward conn, path, "http://cache/administrative-units/"
|
||||
end
|
||||
|
||||
match "/administrative-unit-classification-codes/*path", %{ accept: [:json], layer: :api} do
|
||||
Proxy.forward conn, path, "http://cache/administrative-unit-classification-codes/"
|
||||
end
|
||||
|
||||
match "/organization-classification-codes/*path", %{ accept: [:json], layer: :api} do
|
||||
Proxy.forward conn, path, "http://cache/organization-classification-codes/"
|
||||
end
|
||||
|
||||
match "/registered-organization-classification-codes/*path", %{ accept: [:json], layer: :api} do
|
||||
Proxy.forward conn, path, "http://cache/registered-organization-classification-codes/"
|
||||
end
|
||||
|
||||
match "/worship-administrative-units/*path", %{ accept: [:json], layer: :api} do
|
||||
Proxy.forward conn, path, "http://resource/worship-administrative-units/"
|
||||
Proxy.forward conn, path, "http://cache/worship-administrative-units/"
|
||||
end
|
||||
|
||||
match "/worship-services/*path", %{ accept: [:json], layer: :api} do
|
||||
Proxy.forward conn, path, "http://resource/worship-services/" # DISABLE CACHING FOR NOW (BUG OP-1404)
|
||||
Proxy.forward conn, path, "http://cache/worship-services/"
|
||||
end
|
||||
|
||||
match "/recognized-worship-types/*path", %{ accept: [:json], layer: :api} do
|
||||
@@ -97,7 +109,7 @@ defmodule Dispatcher do
|
||||
end
|
||||
|
||||
match "/central-worship-services/*path", %{ accept: [:json], layer: :api} do
|
||||
Proxy.forward conn, path, "http://resource/central-worship-services/"
|
||||
Proxy.forward conn, path, "http://cache/central-worship-services/"
|
||||
end
|
||||
|
||||
match "/representative-bodies/*path", %{ accept: [:json], layer: :api} do
|
||||
@@ -113,7 +125,7 @@ defmodule Dispatcher do
|
||||
end
|
||||
|
||||
match "/local-involvements/*path", %{ accept: [:json], layer: :api} do
|
||||
Proxy.forward conn, path, "http://resource/local-involvements/"
|
||||
Proxy.forward conn, path, "http://cache/local-involvements/"
|
||||
end
|
||||
|
||||
match "/identifiers/*path", %{ accept: [:json], layer: :api} do
|
||||
@@ -215,6 +227,11 @@ defmodule Dispatcher do
|
||||
Proxy.forward conn, path, "http://cache/decision-activities/"
|
||||
end
|
||||
|
||||
# There is currently no logic to invalidate the kboOrganization cache when wegwijse updates the content
|
||||
match "/kbo-organizations/*path", %{ accept: [:any], layer: :api} do
|
||||
Proxy.forward conn, path, "http://resource/kbo-organizations/"
|
||||
end
|
||||
|
||||
###############
|
||||
# LOGIN
|
||||
###############
|
||||
@@ -245,7 +262,6 @@ defmodule Dispatcher do
|
||||
###############################################################
|
||||
|
||||
match "/search/*path", %{ accept: %{ json: true }, layer: :api_services} do
|
||||
IO.puts("hey")
|
||||
Proxy.forward conn, path, "http://search/"
|
||||
end
|
||||
|
||||
@@ -301,8 +317,16 @@ defmodule Dispatcher do
|
||||
forward conn, path, "http://uri-info/"
|
||||
end
|
||||
|
||||
post "/create-administrative-unit-relationships/*path", %{ layer: :api_services, accept: %{ json: true } } do
|
||||
forward conn, path, "http://construct-administrative-unit-relationships/create-relationships/"
|
||||
post "/construct-organization-relationships/*path", %{ layer: :api_services, accept: %{ json: true } } do
|
||||
forward conn, path, "http://construct-organization-relationships/create-relationships/"
|
||||
end
|
||||
|
||||
post "/kbo-data-sync/*path", %{ layer: :api_services, accept: %{ json: true } } do
|
||||
forward conn, path, "http://kbo-data-sync/sync-kbo-data/"
|
||||
end
|
||||
|
||||
get "/ldes/*path", %{ layer: :api_services } do
|
||||
forward conn, path, "http://ldes-backend/"
|
||||
end
|
||||
|
||||
#################################################################
|
||||
@@ -337,21 +361,20 @@ defmodule Dispatcher do
|
||||
Proxy.forward conn, path, "http://resource/distributions/"
|
||||
end
|
||||
|
||||
|
||||
#################################################################
|
||||
# DELTA: administrative-units
|
||||
#################################################################
|
||||
|
||||
get "/sync/administrative-units/files/*path" do
|
||||
Proxy.forward conn, path, "http://delta-producer-json-diff-file-publisher-administrative-units/files/"
|
||||
end
|
||||
|
||||
#################################################################
|
||||
# DELTA: organizations
|
||||
#################################################################
|
||||
|
||||
get "/sync/organizations/files/*path" do
|
||||
Proxy.forward conn, path, "http://delta-producer-json-diff-file-publisher-organizations/files/"
|
||||
Proxy.forward conn, path, "http://delta-producer-publication-graph-maintainer/organizations/files/"
|
||||
end
|
||||
|
||||
#################################################################
|
||||
# DELTA: organizations-public-info
|
||||
#################################################################
|
||||
|
||||
get "/sync/organizations-public-info/files/*path" do
|
||||
Proxy.forward(conn, path, "http://delta-producer-publication-graph-maintainer/organizations-public-info/files/")
|
||||
end
|
||||
|
||||
#################################################################
|
||||
@@ -359,7 +382,7 @@ defmodule Dispatcher do
|
||||
#################################################################
|
||||
|
||||
get "/sync/public/files/*path" do
|
||||
Proxy.forward conn, path, "http://delta-producer-json-diff-publisher-public/files/"
|
||||
Proxy.forward(conn, path, "http://delta-producer-publication-graph-maintainer/public/files/")
|
||||
end
|
||||
|
||||
#################################################################
|
||||
@@ -367,17 +390,21 @@ defmodule Dispatcher do
|
||||
#################################################################
|
||||
|
||||
get "/sync/worship-posts/files/*path" do
|
||||
Proxy.forward conn, path, "http://delta-producer-pub-graph-maintainer-worship-posts/files/"
|
||||
Proxy.forward(conn, path, "http://delta-producer-publication-graph-maintainer/worship-posts/files/")
|
||||
end
|
||||
|
||||
#################################################################
|
||||
# Exports
|
||||
#################################################################
|
||||
|
||||
get "/download-exports/*path" do
|
||||
Proxy.forward conn, path, "http://download-exports/"
|
||||
end
|
||||
|
||||
###############################################################
|
||||
# frontend layer
|
||||
###############################################################
|
||||
|
||||
match "/authorization/callback/*_path", %{ accept: [:html], layer: :api } do
|
||||
Proxy.forward conn, [], "http://frontend/torii/redirect.html"
|
||||
end
|
||||
|
||||
match "/assets/*path", %{ layer: :api } do
|
||||
Proxy.forward conn, path, "http://frontend/assets/"
|
||||
end
|
||||
|
||||
@@ -63,6 +63,38 @@
|
||||
}
|
||||
]
|
||||
},
|
||||
"http://redpencil.data.gift/id/jobs/concept/JobOperation/deltas/initialPublicationGraphSyncing/organizations-public-info": {
|
||||
"tasksConfiguration": [
|
||||
{
|
||||
"currentOperation": null,
|
||||
"nextOperation": "http://redpencil.data.gift/id/jobs/concept/TaskOperation/deltas/initialPublicationGraphSyncing",
|
||||
"nextIndex": "0"
|
||||
},
|
||||
{
|
||||
"currentOperation": "http://redpencil.data.gift/id/jobs/concept/TaskOperation/deltas/initialPublicationGraphSyncing",
|
||||
"nextOperation": "http://redpencil.data.gift/id/jobs/concept/TaskOperation/deltas/deltaDumpFileCreation",
|
||||
"nextIndex": "1"
|
||||
}
|
||||
]
|
||||
},
|
||||
"http://redpencil.data.gift/id/jobs/concept/JobOperation/deltas/healingOperation/organizations-public-info": {
|
||||
"tasksConfiguration": [
|
||||
{
|
||||
"currentOperation": null,
|
||||
"nextOperation": "http://redpencil.data.gift/id/jobs/concept/TaskOperation/deltas/healing/patchPublicationGraph",
|
||||
"nextIndex": "0"
|
||||
}
|
||||
]
|
||||
},
|
||||
"http://redpencil.data.gift/id/jobs/concept/JobOperation/deltas/deltaDumpFileCreation/organizations-public-info": {
|
||||
"tasksConfiguration": [
|
||||
{
|
||||
"currentOperation": null,
|
||||
"nextOperation": "http://redpencil.data.gift/id/jobs/concept/TaskOperation/deltas/deltaDumpFileCreation",
|
||||
"nextIndex": "0"
|
||||
}
|
||||
]
|
||||
},
|
||||
"http://redpencil.data.gift/id/jobs/concept/JobOperation/deltas/initialPublicationGraphSyncing/public": {
|
||||
"tasksConfiguration": [
|
||||
{
|
||||
@@ -126,5 +158,23 @@
|
||||
"nextIndex": "0"
|
||||
}
|
||||
]
|
||||
},
|
||||
"http://redpencil.data.gift/id/jobs/concept/JobOperation/sp-sync/initialSyncing/organizations": {
|
||||
"tasksConfiguration": [
|
||||
{
|
||||
"currentOperation": null,
|
||||
"nextOperation": "http://redpencil.data.gift/id/jobs/concept/TaskOperation/sp-sync/initialSyncing",
|
||||
"nextIndex": "0"
|
||||
}
|
||||
]
|
||||
},
|
||||
"http://redpencil.data.gift/id/jobs/concept/JobOperation/sp-sync/healingOperation/organizations": {
|
||||
"tasksConfiguration": [
|
||||
{
|
||||
"currentOperation": null,
|
||||
"nextOperation": "http://redpencil.data.gift/id/jobs/concept/TaskOperation/sp-sync/healing",
|
||||
"nextIndex": "0"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
6
config/kalliope/security-dev.json
Normal file
6
config/kalliope/security-dev.json
Normal file
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"enabled": false,
|
||||
"allowedIpAddresses": [],
|
||||
"authSource": "/config/source.json",
|
||||
"authOutput": "/config/output.json"
|
||||
}
|
||||
@@ -1,9 +0,0 @@
|
||||
# disabled on dev
|
||||
application:
|
||||
security:
|
||||
enabled: false
|
||||
spring:
|
||||
autoconfigure:
|
||||
exclude:
|
||||
- org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration
|
||||
- org.springframework.boot.actuate.autoconfigure.security.servlet.ManagementWebSecurityAutoConfiguration
|
||||
73
config/ldes-delta-pusher/dispatch.ts
Normal file
73
config/ldes-delta-pusher/dispatch.ts
Normal file
@@ -0,0 +1,73 @@
|
||||
import { moveTriples } from "../support";
|
||||
import { Changeset } from "../types";
|
||||
import { query, sparqlEscapeUri } from 'mu';
|
||||
|
||||
export default async function dispatch(changesets: Changeset[]) {
|
||||
for (const changeset of changesets) {
|
||||
const subjects = new Set(changeset.inserts.map((insert) => insert.subject.value));
|
||||
for (const subject of subjects) {
|
||||
const { results: { bindings } } = await query(`
|
||||
PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
|
||||
PREFIX code: <http://telegraphis.net/ontology/measurement/code#>
|
||||
PREFIX org: <http://www.w3.org/ns/org#>
|
||||
PREFIX adms: <http://www.w3.org/ns/adms#>
|
||||
PREFIX generiek: <https://data.vlaanderen.be/ns/generiek#>
|
||||
|
||||
CONSTRUCT {
|
||||
?organization a org:Organization;
|
||||
skos:prefLabel ?prefLabel;
|
||||
adms:identifier ?identifier;
|
||||
org:hasPrimarySite ?site.
|
||||
?identifier skos:notation ?identifierLabel;
|
||||
generiek:gestructureerdeIdentificator ?gestructureerdeIdentificator.
|
||||
?gestructureerdeIdentificator generiek:lokaleIdentificator ?lokaleIdentificator.
|
||||
?site org:siteAddress ?siteAddress.
|
||||
?siteAddress ?p ?o.
|
||||
} WHERE {
|
||||
{
|
||||
VALUES ?organization { ${sparqlEscapeUri(subject)} }
|
||||
?organization a org:Organization;
|
||||
skos:prefLabel ?prefLabel;
|
||||
adms:identifier ?identifier;
|
||||
org:hasPrimarySite ?site.
|
||||
?identifier skos:notation ?identifierLabel;
|
||||
generiek:gestructureerdeIdentificator ?gestructureerdeIdentificator.
|
||||
?gestructureerdeIdentificator generiek:lokaleIdentificator ?lokaleIdentificator.
|
||||
?site org:siteAddress ?siteAddress.
|
||||
?siteAddress ?p ?o.
|
||||
} UNION {
|
||||
VALUES ?site { ${sparqlEscapeUri(subject)} }
|
||||
?organization a org:Organization;
|
||||
skos:prefLabel ?prefLabel;
|
||||
adms:identifier ?identifier;
|
||||
org:hasPrimarySite ?site.
|
||||
?identifier skos:notation ?identifierLabel;
|
||||
generiek:gestructureerdeIdentificator ?gestructureerdeIdentificator.
|
||||
?gestructureerdeIdentificator generiek:lokaleIdentificator ?lokaleIdentificator.
|
||||
?site org:siteAddress ?siteAddress.
|
||||
?siteAddress ?p ?o.
|
||||
} UNION {
|
||||
VALUES ?siteAddress { ${sparqlEscapeUri(subject)} }
|
||||
?organization a org:Organization;
|
||||
skos:prefLabel ?prefLabel;
|
||||
adms:identifier ?identifier;
|
||||
org:hasPrimarySite ?site.
|
||||
?identifier skos:notation ?identifierLabel;
|
||||
generiek:gestructureerdeIdentificator ?gestructureerdeIdentificator.
|
||||
?gestructureerdeIdentificator generiek:lokaleIdentificator ?lokaleIdentificator.
|
||||
?site org:siteAddress ?siteAddress.
|
||||
?siteAddress ?p ?o.
|
||||
}
|
||||
}
|
||||
`);
|
||||
if(bindings.length){
|
||||
console.log('SUCCESS')
|
||||
await moveTriples([
|
||||
{
|
||||
inserts: bindings.map(({ s, p, o}) => { return { subject: s, predicate: p, object: o} }),
|
||||
}
|
||||
])
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,11 +0,0 @@
|
||||
const contextConfig = {
|
||||
addTypes: {
|
||||
scope: 'all', // 'inserts, 'deletes', 'all' or none. To add rdf:type to subjects of inserts, deletes or both
|
||||
exhausitive: false, // true or false: find all types for a subject, even if one is already present in delta
|
||||
},
|
||||
contextQueries: []
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
contextConfig
|
||||
};
|
||||
@@ -1,85 +0,0 @@
|
||||
const {
|
||||
transformStatements,
|
||||
deleteFromTargetGraph,
|
||||
insertIntoTargetGraph,
|
||||
} = require('./util');
|
||||
|
||||
/**
|
||||
* Dispatch the fetched information to a target graph.
|
||||
* Note: <share://file/data> will be ADDED to it's own graph.
|
||||
* We take only care of adding them, not updating triples, this is a TODO
|
||||
* @param { mu, muAuthSudo } lib - The provided libraries from the host service.
|
||||
* @param { termObjectChangeSets: { deletes, inserts } } data - The fetched changes sets, which objects of serialized Terms
|
||||
* [ {
|
||||
* graph: "<http://foo>",
|
||||
* subject: "<http://bar>",
|
||||
* predicate: "<http://baz>",
|
||||
* object: "<http://boom>^^<http://datatype>"
|
||||
* }
|
||||
* ]
|
||||
* @return {void} Nothing
|
||||
*/
|
||||
async function dispatch(lib, data) {
|
||||
const { mu, fetch } = lib;
|
||||
let { termObjectChangeSets, termObjectChangeSetsWithContext } = data;
|
||||
|
||||
// Both arrays are the same length, so we can zip them together for easier processing
|
||||
zippedChangeSets = termObjectChangeSets.map((o, i) => ({
|
||||
original: o,
|
||||
withContext: termObjectChangeSetsWithContext[i]
|
||||
}));
|
||||
|
||||
console.log(`Received ${zippedChangeSets.length} change sets`)
|
||||
|
||||
for (let { original, withContext } of zippedChangeSets) {
|
||||
let originalDeletes, originalInserts, insertsWithContext, deletesWithContext;
|
||||
try {
|
||||
originalInserts = original.inserts.map(o => `${o.subject} ${o.predicate} ${o.object}.`);
|
||||
originalDeletes = original.deletes.map(o => `${o.subject} ${o.predicate} ${o.object}.`);
|
||||
} catch (e) {
|
||||
console.log(`Error while processing change set: ${e}`);
|
||||
console.log(`Original change set: ${JSON.stringify(original)}`);
|
||||
throw e;
|
||||
}
|
||||
|
||||
// Extra context needed for mapping from DL to OP model and filtering based on type.
|
||||
try {
|
||||
insertsWithContext = withContext.inserts.map(o => `${o.subject} ${o.predicate} ${o.object}.`);
|
||||
deletesWithContext = withContext.deletes.map(o => `${o.subject} ${o.predicate} ${o.object}.`);
|
||||
} catch (e) {
|
||||
console.log(`Error while processing change set with context: ${e}`);
|
||||
console.log(`Change set with context: ${JSON.stringify(withContext)}`);
|
||||
throw e;
|
||||
}
|
||||
|
||||
if (originalDeletes.length) {
|
||||
// Map deletes from DL to OP model
|
||||
const transformedDeletes = await transformStatements(fetch, deletesWithContext);
|
||||
|
||||
if (!transformedDeletes.length) {
|
||||
console.log(`Warn: Delete statements mapped to empty result.`);
|
||||
console.log(`Input: ${deletesWithContext}`);
|
||||
console.log(`Output: ${transformedDeletes}`);
|
||||
} else {
|
||||
await deleteFromTargetGraph(lib, transformedDeletes);
|
||||
}
|
||||
}
|
||||
|
||||
if (originalInserts.length) {
|
||||
// Map inserts from DL to OP model
|
||||
const transformedInserts = await transformStatements(fetch, insertsWithContext);
|
||||
|
||||
if (!transformedInserts.length) {
|
||||
console.log(`Warn: Insert statements mapped to empty result.`);
|
||||
console.log(`Input: ${insertsWithContext}`);
|
||||
console.log(`Output: ${transformedInserts}`);
|
||||
} else {
|
||||
await insertIntoTargetGraph(lib, transformedInserts);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
dispatch
|
||||
};
|
||||
@@ -1,168 +0,0 @@
|
||||
const {
|
||||
MAX_REASONING_RETRY_ATTEMPTS,
|
||||
SLEEP_TIME_AFTER_FAILED_REASONING_OPERATION,
|
||||
MAX_DB_RETRY_ATTEMPTS,
|
||||
SLEEP_BETWEEN_BATCHES,
|
||||
SLEEP_TIME_AFTER_FAILED_DB_OPERATION,
|
||||
TARGET_GRAPH,
|
||||
LANDING_ZONE_GRAPH,
|
||||
BATCH_SIZE,
|
||||
} = require('./config');
|
||||
|
||||
async function batchedDbUpdate(
|
||||
muUpdate,
|
||||
graph,
|
||||
triples,
|
||||
extraHeaders,
|
||||
endpoint,
|
||||
batchSize,
|
||||
maxAttempts,
|
||||
sleepBetweenBatches = 1000,
|
||||
sleepTimeOnFail = 1000,
|
||||
operation = 'INSERT'
|
||||
) {
|
||||
|
||||
for (let i = 0; i < triples.length; i += batchSize) {
|
||||
console.log(`Inserting triples in batch: ${i}-${i + batchSize}`);
|
||||
|
||||
const batch = triples.slice(i, i + batchSize).join('\n');
|
||||
|
||||
const insertCall = async () => {
|
||||
await muUpdate(`
|
||||
${operation} DATA {
|
||||
GRAPH <${graph}> {
|
||||
${batch}
|
||||
}
|
||||
}
|
||||
`, extraHeaders, endpoint);
|
||||
};
|
||||
|
||||
await operationWithRetry(insertCall, 0, maxAttempts, sleepTimeOnFail);
|
||||
|
||||
console.log(`Sleeping before next query execution: ${sleepBetweenBatches}`);
|
||||
await new Promise(r => setTimeout(r, sleepBetweenBatches));
|
||||
}
|
||||
}
|
||||
|
||||
async function operationWithRetry(callback,
|
||||
attempt,
|
||||
maxAttempts,
|
||||
sleepTimeOnFail) {
|
||||
try {
|
||||
if (typeof callback === "function")
|
||||
return await callback();
|
||||
else // Catch error from promise - not how I would do it normally, but allows re use of existing code.
|
||||
return await callback;
|
||||
}
|
||||
catch (e) {
|
||||
console.log(`Operation failed for ${callback.toString()}, attempt: ${attempt} of ${maxAttempts}`);
|
||||
console.log(`Error: ${e}`);
|
||||
console.log(`Sleeping ${sleepTimeOnFail} ms`);
|
||||
|
||||
if (attempt >= maxAttempts) {
|
||||
console.log(`Max attempts reached for ${callback.toString()}, giving up`);
|
||||
throw e;
|
||||
}
|
||||
|
||||
await new Promise(r => setTimeout(r, sleepTimeOnFail));
|
||||
return operationWithRetry(callback, ++attempt, maxAttempts, sleepTimeOnFail);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Splits an array into two parts, a part that passes and a part that fails a predicate function.
|
||||
* Credits: https://github.com/benjay10
|
||||
* @public
|
||||
* @function partition
|
||||
* @param {Array} arr - Array to be partitioned
|
||||
* @param {Function} fn - Function that accepts single argument: an element of the array, and should return a truthy or falsy value.
|
||||
* @returns {Object} Object that contains keys passes and fails, each representing an array with elemets that pass or fail the predicate respectively
|
||||
*/
|
||||
function partition(arr, fn) {
|
||||
let passes = [], fails = [];
|
||||
arr.forEach((item) => (fn(item) ? passes : fails).push(item));
|
||||
return { passes, fails };
|
||||
}
|
||||
|
||||
/**
|
||||
* Send triples to reasoning service for conversion
|
||||
*
|
||||
*/
|
||||
async function transformTriples(fetch, triples, mapping) {
|
||||
return await operationWithRetry(mainConversion(fetch, triples, mapping), 0,
|
||||
MAX_REASONING_RETRY_ATTEMPTS, SLEEP_TIME_AFTER_FAILED_REASONING_OPERATION);
|
||||
}
|
||||
|
||||
async function mainConversion(fetch, triples, mapping) {
|
||||
let formdata = new URLSearchParams();
|
||||
formdata.append("data", triples);
|
||||
|
||||
let requestOptions = {
|
||||
method: 'POST',
|
||||
body: formdata,
|
||||
redirect: 'follow'
|
||||
};
|
||||
|
||||
const response = await fetch(`http://reasoner/reason/dl2op/${mapping}`, requestOptions)
|
||||
return await response.text();
|
||||
}
|
||||
|
||||
async function transformStatements(fetch, triples, mapping = 'main') {
|
||||
console.log(`Received ${JSON.stringify(triples)} to transform`);
|
||||
const transformedTriples = await transformTriples(fetch, triples.join('\n'), mapping);
|
||||
statements = transformedTriples ? transformedTriples.replace(/\n{2,}/g, '').split('\n') : [];
|
||||
console.log(`CONVERSION: FROM ${triples.length} triples to ${statements.length}`);
|
||||
return statements;
|
||||
}
|
||||
|
||||
async function deleteFromTargetGraph(lib, statements) {
|
||||
console.log(`Deleting ${statements.length} statements from target graph`);
|
||||
console.log(`Statements: ${JSON.stringify(statements)}`)
|
||||
await batchedDbUpdate(
|
||||
lib.muAuthSudo.updateSudo,
|
||||
TARGET_GRAPH,
|
||||
statements,
|
||||
{},
|
||||
process.env.MU_SPARQL_ENDPOINT,
|
||||
BATCH_SIZE,
|
||||
MAX_DB_RETRY_ATTEMPTS,
|
||||
SLEEP_BETWEEN_BATCHES,
|
||||
SLEEP_TIME_AFTER_FAILED_DB_OPERATION,
|
||||
'DELETE');
|
||||
}
|
||||
|
||||
async function insertIntoTargetGraph(lib, statements) {
|
||||
console.log(`Inserting ${statements.length} statements into target graph`);
|
||||
console.log(`Statements: ${JSON.stringify(statements)}`)
|
||||
|
||||
await batchedDbUpdate(
|
||||
lib.muAuthSudo.updateSudo,
|
||||
TARGET_GRAPH,
|
||||
statements,
|
||||
{},
|
||||
process.env.MU_SPARQL_ENDPOINT,
|
||||
BATCH_SIZE,
|
||||
MAX_DB_RETRY_ATTEMPTS,
|
||||
SLEEP_BETWEEN_BATCHES,
|
||||
SLEEP_TIME_AFTER_FAILED_DB_OPERATION,
|
||||
'INSERT');
|
||||
}
|
||||
|
||||
async function transformLandingZoneGraph(fetch, endpoint, mapping = 'main') {
|
||||
console.log(`Transforming landing zone graph: ${LANDING_ZONE_GRAPH}`);
|
||||
|
||||
const response = await fetch(`http://reasoner/reason/dl2op/${mapping}?data=${encodeURIComponent(`${endpoint}?default-graph-uri=&query=CONSTRUCT+%7B%0D%0A%3Fs+%3Fp+%3Fo%0D%0A%7D+WHERE+%7B%0D%0A+GRAPH+<${LANDING_ZONE_GRAPH}>+%7B%0D%0A%3Fs+%3Fp+%3Fo%0D%0A%7D%0D%0A%7D&should-sponge=&format=text%2Fplain&timeout=0&run=+Run+Query`)}`);
|
||||
const text = await response.text();
|
||||
const statements = text.replace(/\n{2,}/g, '').split('\n');
|
||||
|
||||
return statements;
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
batchedDbUpdate,
|
||||
partition,
|
||||
transformStatements,
|
||||
transformLandingZoneGraph,
|
||||
deleteFromTargetGraph,
|
||||
insertIntoTargetGraph
|
||||
};
|
||||
@@ -0,0 +1,21 @@
|
||||
PREFIX schema: <http://schema.org/>
|
||||
|
||||
CONSTRUCT {
|
||||
?s schema:telephone ?cleanedPhoneNumber .
|
||||
} WHERE {
|
||||
?s schema:telephone ?phoneNumber .
|
||||
|
||||
# Remove all non digits
|
||||
BIND(REPLACE(?phoneNumber, """[^+\\d]""", "") AS ?scrapeResult)
|
||||
|
||||
# Replace leading 00 with +
|
||||
BIND(REPLACE(?scrapeResult, """^00""", "+") AS ?replacedZeroZero)
|
||||
|
||||
BIND(REPLACE(?replacedZeroZero, """^0""", "+32") AS ?defaultBe)
|
||||
|
||||
BIND(REPLACE(?defaultBe, """\\+320""", "+32") AS ?extendedDefaultBe)
|
||||
|
||||
BIND(REPLACE(?extendedDefaultBe, """^320""", "+32") AS ?finalResult)
|
||||
|
||||
BIND(IF(REGEX(?finalResult, """^\\+((32\\d{8})|(324\\d{8})|((?!32)\\d+))$"""), CONCAT("tel:", ?finalResult), ?phoneNumber) AS ?cleanedPhoneNumber)
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
PREFIX mandaat: <http://data.vlaanderen.be/ns/mandaat#>
|
||||
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
|
||||
|
||||
CONSTRUCT {
|
||||
?s mandaat:einde ?endDateTime .
|
||||
} WHERE {
|
||||
?s mandaat:einde ?endDate .
|
||||
|
||||
BIND(SUBSTR(STR(?endDate), 1, 10) as ?endDateWithoutTimezone)
|
||||
BIND(STRDT(CONCAT(?endDateWithoutTimezone, 'T02:00:00'), xsd:dateTime) as ?endDateTime)
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
PREFIX mandaat: <http://data.vlaanderen.be/ns/mandaat#>
|
||||
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
|
||||
|
||||
CONSTRUCT {
|
||||
?s mandaat:start ?startDateTime .
|
||||
} WHERE {
|
||||
?s mandaat:start ?startDate .
|
||||
|
||||
BIND(SUBSTR(STR(?startDate), 1, 10) as ?startDateWithoutTimezone)
|
||||
BIND(STRDT(CONCAT(?startDateWithoutTimezone, 'T02:00:00'), xsd:dateTime) as ?startDateTime)
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
PREFIX dc_terms: <http://purl.org/dc/terms/>
|
||||
PREFIX lblodlg: <http://data.lblod.info/vocabularies/leidinggevenden/>
|
||||
PREFIX person: <http://www.w3.org/ns/person#>
|
||||
|
||||
CONSTRUCT {
|
||||
?s a dc_terms:Agent .
|
||||
} WHERE {
|
||||
?s a ?type .
|
||||
|
||||
VALUES ?type {
|
||||
lblodlg:Functionaris
|
||||
person:Person
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
PREFIX ch: <http://data.lblod.info/vocabularies/contacthub/>
|
||||
PREFIX lblodlg: <http://data.lblod.info/vocabularies/leidinggevenden/>
|
||||
|
||||
CONSTRUCT {
|
||||
?s a ch:AgentInPositie .
|
||||
} WHERE {
|
||||
?s a ?type .
|
||||
|
||||
VALUES ?type {
|
||||
lblodlg:Functionaris
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
PREFIX org: <http://www.w3.org/ns/org#>
|
||||
|
||||
CONSTRUCT {
|
||||
?o org:heldBy ?s.
|
||||
}
|
||||
WHERE {
|
||||
?s org:holds ?o.
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
CONSTRUCT {
|
||||
?s ?p ?o.
|
||||
} WHERE {
|
||||
?s a <http://www.w3.org/ns/locn#Address>;
|
||||
?p ?o.
|
||||
|
||||
FILTER NOT EXISTS {
|
||||
?s ?p "" .
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
CONSTRUCT {
|
||||
?s <http://schema.org/contactPoint> ?contactpoint.
|
||||
}
|
||||
WHERE {
|
||||
?s a <http://data.lblod.info/vocabularies/leidinggevenden/Bestuursfunctie>.
|
||||
?s <http://schema.org/contactPoint> ?contactpoint.
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
CONSTRUCT {
|
||||
?s ?p ?o.
|
||||
} WHERE {
|
||||
?s a <http://schema.org/ContactPoint>;
|
||||
?p ?o.
|
||||
FILTER (?p NOT IN (<http://schema.org/telephone>))
|
||||
|
||||
FILTER NOT EXISTS {
|
||||
?s ?p "" .
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
PREFIX mandaat: <http://data.vlaanderen.be/ns/mandaat#>
|
||||
|
||||
CONSTRUCT {
|
||||
?s ?p ?o.
|
||||
} WHERE {
|
||||
?s a <http://data.lblod.info/vocabularies/leidinggevenden/Functionaris>;
|
||||
?p ?o.
|
||||
|
||||
FILTER (?p NOT IN (mandaat:start, mandaat:einde))
|
||||
|
||||
FILTER NOT EXISTS {
|
||||
?s ?p "" .
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
CONSTRUCT {
|
||||
?s ?p ?o.
|
||||
} WHERE {
|
||||
?s a <http://www.w3.org/ns/person#Person>;
|
||||
?p ?o.
|
||||
|
||||
FILTER (?p IN (
|
||||
<http://www.w3.org/1999/02/22-rdf-syntax-ns#type>,
|
||||
<http://xmlns.com/foaf/0.1/familyName>,
|
||||
<http://mu.semte.ch/vocabularies/core/uuid>
|
||||
))
|
||||
|
||||
FILTER NOT EXISTS {
|
||||
?s ?p "" .
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
|
||||
PREFIX persoon: <https://data.vlaanderen.be/ns/persoon#>
|
||||
PREFIX persoon_loket: <http://data.vlaanderen.be/ns/persoon#>
|
||||
PREFIX person: <http://www.w3.org/ns/person#>
|
||||
|
||||
# DL and OP both use persoon:gebruikteVoornaam but with different semantics (!)
|
||||
|
||||
# First name: persoon:gebruikteVoornaam => foaf:givenName
|
||||
# Alternatieve voornaam: foaf:name => persoon:gebruikteVoornaam
|
||||
|
||||
# We do both in one query with an OPTIONAL because they need to happen simultaneously
|
||||
# not to end up in a loop
|
||||
|
||||
# Part 1
|
||||
|
||||
CONSTRUCT {
|
||||
?s persoon:gebruikteVoornaam ?name .
|
||||
} WHERE {
|
||||
?s a person:Person;
|
||||
foaf:name ?name .
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
|
||||
PREFIX persoon: <https://data.vlaanderen.be/ns/persoon#>
|
||||
PREFIX persoon_loket: <http://data.vlaanderen.be/ns/persoon#>
|
||||
PREFIX person: <http://www.w3.org/ns/person#>
|
||||
|
||||
# DL and OP both use persoon:gebruikteVoornaam but with different semantics (!)
|
||||
|
||||
# First name: persoon:gebruikteVoornaam => foaf:givenName
|
||||
# Alternatieve voornaam: foaf:name => persoon:gebruikteVoornaam
|
||||
|
||||
# We do both in one query with an OPTIONAL because they need to happen simultaneously
|
||||
# not to end up in a loop
|
||||
|
||||
# Part 2
|
||||
|
||||
CONSTRUCT {
|
||||
?s foaf:givenName ?gebruikteVoornaam .
|
||||
} WHERE {
|
||||
?s a person:Person ;
|
||||
persoon_loket:gebruikteVoornaam ?gebruikteVoornaam .
|
||||
}
|
||||
@@ -1,33 +0,0 @@
|
||||
const BATCH_SIZE = parseInt(process.env.BATCH_SIZE) || 100;
|
||||
const MU_CALL_SCOPE_ID_INITIAL_SYNC = process.env.MU_CALL_SCOPE_ID_INITIAL_SYNC || 'http://redpencil.data.gift/id/concept/muScope/deltas/consumer/initialSync';
|
||||
const BYPASS_MU_AUTH_FOR_EXPENSIVE_QUERIES = process.env.BYPASS_MU_AUTH_FOR_EXPENSIVE_QUERIES == 'true' ? true : false;
|
||||
const DIRECT_DATABASE_ENDPOINT = process.env.DIRECT_DATABASE_ENDPOINT || 'http://triplestore:8890/sparql';
|
||||
const MAX_DB_RETRY_ATTEMPTS = parseInt(process.env.MAX_DB_RETRY_ATTEMPTS || 5);
|
||||
const MAX_REASONING_RETRY_ATTEMPTS = parseInt(process.env.MAX_REASONING_RETRY_ATTEMPTS || 5);
|
||||
const SLEEP_BETWEEN_BATCHES = parseInt(process.env.SLEEP_BETWEEN_BATCHES || 1000);
|
||||
const SLEEP_TIME_AFTER_FAILED_REASONING_OPERATION = parseInt(process.env.SLEEP_TIME_AFTER_FAILED_REASONING_OPERATION || 10000);
|
||||
const SLEEP_TIME_AFTER_FAILED_DB_OPERATION = parseInt(process.env.SLEEP_TIME_AFTER_FAILED_DB_OPERATION || 60000);
|
||||
|
||||
// Graphs
|
||||
const TARGET_GRAPH = process.env.TARGET_GRAPH || `http://mu.semte.ch/graphs/administrative-unit`;
|
||||
const LANDING_ZONE_GRAPH = process.env.DCR_LANDING_ZONE_GRAPH || `http://mu.semte.ch/graphs/landing-zone/leidinggevenden`;
|
||||
|
||||
// ENDPOINTS
|
||||
const LANDING_ZONE_DATABASE = process.env.DCR_LANDING_ZONE_DATABASE || 'db';
|
||||
const LANDING_ZONE_DATABASE_ENDPOINT = process.env.DCR_LANDING_ZONE_DATABASE_ENDPOINT || `http://${LANDING_ZONE_DATABASE}:8890/sparql`;
|
||||
|
||||
module.exports = {
|
||||
BATCH_SIZE,
|
||||
MU_CALL_SCOPE_ID_INITIAL_SYNC,
|
||||
BYPASS_MU_AUTH_FOR_EXPENSIVE_QUERIES,
|
||||
DIRECT_DATABASE_ENDPOINT,
|
||||
MAX_DB_RETRY_ATTEMPTS,
|
||||
MAX_REASONING_RETRY_ATTEMPTS,
|
||||
SLEEP_BETWEEN_BATCHES,
|
||||
SLEEP_TIME_AFTER_FAILED_DB_OPERATION,
|
||||
SLEEP_TIME_AFTER_FAILED_REASONING_OPERATION,
|
||||
LANDING_ZONE_GRAPH,
|
||||
LANDING_ZONE_DATABASE_ENDPOINT,
|
||||
TARGET_GRAPH
|
||||
};
|
||||
|
||||
@@ -1,11 +0,0 @@
|
||||
const contextConfig = {
|
||||
addTypes: {
|
||||
scope: 'all', // 'inserts, 'deletes', 'all' or none. To add rdf:type to subjects of inserts, deletes or both
|
||||
exhausitive: false, // true or false: find all types for a subject, even if one is already present in delta
|
||||
},
|
||||
contextQueries: []
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
contextConfig
|
||||
};
|
||||
@@ -1,85 +0,0 @@
|
||||
const {
|
||||
transformStatements,
|
||||
deleteFromTargetGraph,
|
||||
insertIntoTargetGraph,
|
||||
} = require('./util');
|
||||
|
||||
/**
|
||||
* Dispatch the fetched information to a target graph.
|
||||
* Note: <share://file/data> will be ADDED to it's own graph.
|
||||
* We take only care of adding them, not updating triples, this is a TODO
|
||||
* @param { mu, muAuthSudo } lib - The provided libraries from the host service.
|
||||
* @param { termObjectChangeSets: { deletes, inserts } } data - The fetched changes sets, which objects of serialized Terms
|
||||
* [ {
|
||||
* graph: "<http://foo>",
|
||||
* subject: "<http://bar>",
|
||||
* predicate: "<http://baz>",
|
||||
* object: "<http://boom>^^<http://datatype>"
|
||||
* }
|
||||
* ]
|
||||
* @return {void} Nothing
|
||||
*/
|
||||
async function dispatch(lib, data) {
|
||||
const { mu, fetch } = lib;
|
||||
let { termObjectChangeSets, termObjectChangeSetsWithContext } = data;
|
||||
|
||||
// Both arrays are the same length, so we can zip them together for easier processing
|
||||
zippedChangeSets = termObjectChangeSets.map((o, i) => ({
|
||||
original: o,
|
||||
withContext: termObjectChangeSetsWithContext[i]
|
||||
}));
|
||||
|
||||
console.log(`Received ${zippedChangeSets.length} change sets`)
|
||||
|
||||
for (let { original, withContext } of zippedChangeSets) {
|
||||
let originalDeletes, originalInserts, insertsWithContext, deletesWithContext;
|
||||
try {
|
||||
originalInserts = original.inserts.map(o => `${o.subject} ${o.predicate} ${o.object}.`);
|
||||
originalDeletes = original.deletes.map(o => `${o.subject} ${o.predicate} ${o.object}.`);
|
||||
} catch (e) {
|
||||
console.log(`Error while processing change set: ${e}`);
|
||||
console.log(`Original change set: ${JSON.stringify(original)}`);
|
||||
throw e;
|
||||
}
|
||||
|
||||
// Extra context needed for mapping from DL to OP model and filtering based on type.
|
||||
try {
|
||||
insertsWithContext = withContext.inserts.map(o => `${o.subject} ${o.predicate} ${o.object}.`);
|
||||
deletesWithContext = withContext.deletes.map(o => `${o.subject} ${o.predicate} ${o.object}.`);
|
||||
} catch (e) {
|
||||
console.log(`Error while processing change set with context: ${e}`);
|
||||
console.log(`Change set with context: ${JSON.stringify(withContext)}`);
|
||||
throw e;
|
||||
}
|
||||
|
||||
if (originalDeletes.length) {
|
||||
// Map deletes from DL to OP model
|
||||
const transformedDeletes = await transformStatements(fetch, deletesWithContext);
|
||||
|
||||
if (!transformedDeletes.length) {
|
||||
console.log(`Warn: Delete statements mapped to empty result.`);
|
||||
console.log(`Input: ${deletesWithContext}`);
|
||||
console.log(`Output: ${transformedDeletes}`);
|
||||
} else {
|
||||
await deleteFromTargetGraph(lib, transformedDeletes);
|
||||
}
|
||||
}
|
||||
|
||||
if (originalInserts.length) {
|
||||
// Map inserts from DL to OP model
|
||||
const transformedInserts = await transformStatements(fetch, insertsWithContext);
|
||||
|
||||
if (!transformedInserts.length) {
|
||||
console.log(`Warn: Insert statements mapped to empty result.`);
|
||||
console.log(`Input: ${insertsWithContext}`);
|
||||
console.log(`Output: ${transformedInserts}`);
|
||||
} else {
|
||||
await insertIntoTargetGraph(lib, transformedInserts);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
dispatch
|
||||
};
|
||||
@@ -1,85 +0,0 @@
|
||||
const { batchedDbUpdate, transformLandingZoneGraph } = require('./util');
|
||||
const {
|
||||
BYPASS_MU_AUTH_FOR_EXPENSIVE_QUERIES,
|
||||
DIRECT_DATABASE_ENDPOINT,
|
||||
MU_CALL_SCOPE_ID_INITIAL_SYNC,
|
||||
BATCH_SIZE,
|
||||
MAX_DB_RETRY_ATTEMPTS,
|
||||
SLEEP_BETWEEN_BATCHES,
|
||||
SLEEP_TIME_AFTER_FAILED_DB_OPERATION,
|
||||
TARGET_GRAPH,
|
||||
LANDING_ZONE_GRAPH,
|
||||
LANDING_ZONE_DATABASE_ENDPOINT
|
||||
} = require('./config');
|
||||
|
||||
const endpoint = BYPASS_MU_AUTH_FOR_EXPENSIVE_QUERIES ? DIRECT_DATABASE_ENDPOINT : process.env.MU_SPARQL_ENDPOINT;
|
||||
|
||||
/**
|
||||
* Dispatch the fetched information to a target graph.
|
||||
* @param { mu, muAuthSudo } lib - The provided libraries from the host service.
|
||||
* @param { termObjects } data - The fetched quad information, which objects of serialized Terms
|
||||
* [ {
|
||||
* graph: "<http://foo>",
|
||||
* subject: "<http://bar>",
|
||||
* predicate: "<http://baz>",
|
||||
* object: "<http://boom>^^<http://datatype>"
|
||||
* }
|
||||
* ]
|
||||
* @return {void} Nothing
|
||||
*/
|
||||
async function dispatch(lib, data) {
|
||||
const { mu, muAuthSudo } = lib;
|
||||
const { termObjects } = data;
|
||||
|
||||
// Steps:
|
||||
// 1. Write the triples to the landing zone graph - withouth any mapping or filtering
|
||||
// 2. One-time reasoning run with the full landing zone graph and write the results to the target graph (on-finish)
|
||||
|
||||
if (BYPASS_MU_AUTH_FOR_EXPENSIVE_QUERIES) {
|
||||
console.warn(`Service configured to skip MU_AUTH!`);
|
||||
}
|
||||
console.log(`Using ${endpoint} to insert triples`);
|
||||
|
||||
if (termObjects.length) {
|
||||
const originalInsertTriples = termObjects.map(o => `${o.subject} ${o.predicate} ${o.object}.`);
|
||||
|
||||
await batchedDbUpdate(
|
||||
muAuthSudo.updateSudo,
|
||||
LANDING_ZONE_GRAPH,
|
||||
originalInsertTriples,
|
||||
{ 'mu-call-scope-id': MU_CALL_SCOPE_ID_INITIAL_SYNC },
|
||||
LANDING_ZONE_DATABASE_ENDPOINT,
|
||||
BATCH_SIZE,
|
||||
MAX_DB_RETRY_ATTEMPTS,
|
||||
SLEEP_BETWEEN_BATCHES,
|
||||
SLEEP_TIME_AFTER_FAILED_DB_OPERATION
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
async function onFinishInitialIngest(lib) {
|
||||
const { muAuthSudo, fetch } = lib;
|
||||
|
||||
console.log(`!! On-finish triggered !!`);
|
||||
|
||||
const transformedInsertTriples = await transformLandingZoneGraph(fetch, endpoint);
|
||||
|
||||
console.log(`Transformed ${transformedInsertTriples.length} triples`);
|
||||
|
||||
await batchedDbUpdate(
|
||||
muAuthSudo.updateSudo,
|
||||
TARGET_GRAPH,
|
||||
transformedInsertTriples,
|
||||
{ 'mu-call-scope-id': MU_CALL_SCOPE_ID_INITIAL_SYNC },
|
||||
endpoint,
|
||||
BATCH_SIZE,
|
||||
MAX_DB_RETRY_ATTEMPTS,
|
||||
SLEEP_BETWEEN_BATCHES,
|
||||
SLEEP_TIME_AFTER_FAILED_DB_OPERATION
|
||||
);
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
dispatch,
|
||||
onFinishInitialIngest
|
||||
};
|
||||
@@ -1,168 +0,0 @@
|
||||
const {
|
||||
MAX_REASONING_RETRY_ATTEMPTS,
|
||||
SLEEP_TIME_AFTER_FAILED_REASONING_OPERATION,
|
||||
MAX_DB_RETRY_ATTEMPTS,
|
||||
SLEEP_BETWEEN_BATCHES,
|
||||
SLEEP_TIME_AFTER_FAILED_DB_OPERATION,
|
||||
TARGET_GRAPH,
|
||||
LANDING_ZONE_GRAPH,
|
||||
BATCH_SIZE
|
||||
} = require('./config');
|
||||
|
||||
async function batchedDbUpdate(
|
||||
muUpdate,
|
||||
graph,
|
||||
triples,
|
||||
extraHeaders,
|
||||
endpoint,
|
||||
batchSize,
|
||||
maxAttempts,
|
||||
sleepBetweenBatches = 1000,
|
||||
sleepTimeOnFail = 1000,
|
||||
operation = 'INSERT'
|
||||
) {
|
||||
|
||||
for (let i = 0; i < triples.length; i += batchSize) {
|
||||
console.log(`Inserting triples in batch: ${i}-${i + batchSize}`);
|
||||
|
||||
const batch = triples.slice(i, i + batchSize).join('\n');
|
||||
|
||||
const insertCall = async () => {
|
||||
await muUpdate(`
|
||||
${operation} DATA {
|
||||
GRAPH <${graph}> {
|
||||
${batch}
|
||||
}
|
||||
}
|
||||
`, extraHeaders, endpoint);
|
||||
};
|
||||
|
||||
await operationWithRetry(insertCall, 0, maxAttempts, sleepTimeOnFail);
|
||||
|
||||
console.log(`Sleeping before next query execution: ${sleepBetweenBatches}`);
|
||||
await new Promise(r => setTimeout(r, sleepBetweenBatches));
|
||||
}
|
||||
}
|
||||
|
||||
async function operationWithRetry(callback,
|
||||
attempt,
|
||||
maxAttempts,
|
||||
sleepTimeOnFail) {
|
||||
try {
|
||||
if (typeof callback === "function")
|
||||
return await callback();
|
||||
else // Catch error from promise - not how I would do it normally, but allows re use of existing code.
|
||||
return await callback;
|
||||
}
|
||||
catch (e) {
|
||||
console.log(`Operation failed for ${callback.toString()}, attempt: ${attempt} of ${maxAttempts}`);
|
||||
console.log(`Error: ${e}`);
|
||||
console.log(`Sleeping ${sleepTimeOnFail} ms`);
|
||||
|
||||
if (attempt >= maxAttempts) {
|
||||
console.log(`Max attempts reached for ${callback.toString()}, giving up`);
|
||||
throw e;
|
||||
}
|
||||
|
||||
await new Promise(r => setTimeout(r, sleepTimeOnFail));
|
||||
return operationWithRetry(callback, ++attempt, maxAttempts, sleepTimeOnFail);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Splits an array into two parts, a part that passes and a part that fails a predicate function.
|
||||
* Credits: https://github.com/benjay10
|
||||
* @public
|
||||
* @function partition
|
||||
* @param {Array} arr - Array to be partitioned
|
||||
* @param {Function} fn - Function that accepts single argument: an element of the array, and should return a truthy or falsy value.
|
||||
* @returns {Object} Object that contains keys passes and fails, each representing an array with elemets that pass or fail the predicate respectively
|
||||
*/
|
||||
function partition(arr, fn) {
|
||||
let passes = [], fails = [];
|
||||
arr.forEach((item) => (fn(item) ? passes : fails).push(item));
|
||||
return { passes, fails };
|
||||
}
|
||||
|
||||
/**
|
||||
* Send triples to reasoning service for conversion
|
||||
*
|
||||
*/
|
||||
async function transformTriples(fetch, triples, mapping) {
|
||||
return await operationWithRetry(mainConversion(fetch, triples, mapping), 0,
|
||||
MAX_REASONING_RETRY_ATTEMPTS, SLEEP_TIME_AFTER_FAILED_REASONING_OPERATION);
|
||||
}
|
||||
|
||||
async function mainConversion(fetch, triples, mapping) {
|
||||
let formdata = new URLSearchParams();
|
||||
formdata.append("data", triples);
|
||||
|
||||
let requestOptions = {
|
||||
method: 'POST',
|
||||
body: formdata,
|
||||
redirect: 'follow'
|
||||
};
|
||||
|
||||
const response = await fetch(`http://reasoner/reason/dl2op/${mapping}`, requestOptions)
|
||||
return await response.text();
|
||||
}
|
||||
|
||||
async function transformStatements(fetch, triples, mapping = 'main') {
|
||||
console.log(`Received ${JSON.stringify(triples)} to transform`);
|
||||
const transformedTriples = await transformTriples(fetch, triples.join('\n'), mapping);
|
||||
statements = transformedTriples ? transformedTriples.replace(/\n{2,}/g, '').split('\n') : [];
|
||||
console.log(`CONVERSION: FROM ${triples.length} triples to ${statements.length}`);
|
||||
return statements;
|
||||
}
|
||||
|
||||
async function deleteFromTargetGraph(lib, statements) {
|
||||
console.log(`Deleting ${statements.length} statements from target graph`);
|
||||
console.log(`Statements: ${JSON.stringify(statements)}`)
|
||||
await batchedDbUpdate(
|
||||
lib.muAuthSudo.updateSudo,
|
||||
TARGET_GRAPH,
|
||||
statements,
|
||||
{},
|
||||
process.env.MU_SPARQL_ENDPOINT,
|
||||
BATCH_SIZE,
|
||||
MAX_DB_RETRY_ATTEMPTS,
|
||||
SLEEP_BETWEEN_BATCHES,
|
||||
SLEEP_TIME_AFTER_FAILED_DB_OPERATION,
|
||||
'DELETE');
|
||||
}
|
||||
|
||||
async function insertIntoTargetGraph(lib, statements) {
|
||||
console.log(`Inserting ${statements.length} statements into target graph`);
|
||||
console.log(`Statements: ${JSON.stringify(statements)}`)
|
||||
|
||||
await batchedDbUpdate(
|
||||
lib.muAuthSudo.updateSudo,
|
||||
TARGET_GRAPH,
|
||||
statements,
|
||||
{},
|
||||
process.env.MU_SPARQL_ENDPOINT,
|
||||
BATCH_SIZE,
|
||||
MAX_DB_RETRY_ATTEMPTS,
|
||||
SLEEP_BETWEEN_BATCHES,
|
||||
SLEEP_TIME_AFTER_FAILED_DB_OPERATION,
|
||||
'INSERT');
|
||||
}
|
||||
|
||||
async function transformLandingZoneGraph(fetch, endpoint, mapping = 'main') {
|
||||
console.log(`Transforming landing zone graph: ${LANDING_ZONE_GRAPH}`);
|
||||
|
||||
const response = await fetch(`http://reasoner/reason/dl2op/${mapping}?data=${encodeURIComponent(`${endpoint}?default-graph-uri=&query=CONSTRUCT+%7B%0D%0A%3Fs+%3Fp+%3Fo%0D%0A%7D+WHERE+%7B%0D%0A+GRAPH+<${LANDING_ZONE_GRAPH}>+%7B%0D%0A%3Fs+%3Fp+%3Fo%0D%0A%7D%0D%0A%7D&should-sponge=&format=text%2Fplain&timeout=0&run=+Run+Query`)}`);
|
||||
const text = await response.text();
|
||||
const statements = text.replace(/\n{2,}/g, '').split('\n');
|
||||
|
||||
return statements;
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
batchedDbUpdate,
|
||||
partition,
|
||||
transformStatements,
|
||||
transformLandingZoneGraph,
|
||||
deleteFromTargetGraph,
|
||||
insertIntoTargetGraph
|
||||
};
|
||||
@@ -0,0 +1,11 @@
|
||||
PREFIX mandaat: <http://data.vlaanderen.be/ns/mandaat#>
|
||||
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
|
||||
|
||||
CONSTRUCT {
|
||||
?s mandaat:einde ?endDateTime .
|
||||
} WHERE {
|
||||
?s mandaat:einde ?endDate .
|
||||
|
||||
BIND(SUBSTR(STR(?endDate), 1, 10) as ?endDateWithoutTimezone)
|
||||
BIND(STRDT(CONCAT(?endDateWithoutTimezone, 'T02:00:00'), xsd:dateTime) as ?endDateTime)
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
PREFIX mandaat: <http://data.vlaanderen.be/ns/mandaat#>
|
||||
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
|
||||
|
||||
CONSTRUCT {
|
||||
?s mandaat:start ?startDateTime .
|
||||
} WHERE {
|
||||
?s mandaat:start ?startDate .
|
||||
|
||||
BIND(SUBSTR(STR(?startDate), 1, 10) as ?startDateWithoutTimezone)
|
||||
BIND(STRDT(CONCAT(?startDateWithoutTimezone, 'T02:00:00'), xsd:dateTime) as ?startDateTime)
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
PREFIX dc_terms: <http://purl.org/dc/terms/>
|
||||
PREFIX mandaat: <http://data.vlaanderen.be/ns/mandaat#>
|
||||
PREFIX person: <http://www.w3.org/ns/person#>
|
||||
|
||||
CONSTRUCT {
|
||||
?s a dc_terms:Agent .
|
||||
} WHERE {
|
||||
?s a ?type .
|
||||
|
||||
VALUES ?type {
|
||||
mandaat:Mandataris
|
||||
person:Person
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
PREFIX ch: <http://data.lblod.info/vocabularies/contacthub/>
|
||||
PREFIX mandaat: <http://data.vlaanderen.be/ns/mandaat#>
|
||||
|
||||
CONSTRUCT {
|
||||
?s a ch:AgentInPositie .
|
||||
} WHERE {
|
||||
?s a ?type .
|
||||
VALUES ?type {
|
||||
mandaat:Mandataris
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
PREFIX org: <http://www.w3.org/ns/org#>
|
||||
|
||||
CONSTRUCT {
|
||||
?o org:heldBy ?s.
|
||||
}
|
||||
WHERE {
|
||||
?s org:holds ?o.
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
PREFIX mandaat: <http://data.vlaanderen.be/ns/mandaat#>
|
||||
|
||||
CONSTRUCT {
|
||||
?s ?p ?o.
|
||||
} WHERE {
|
||||
?s a <http://data.vlaanderen.be/ns/mandaat#Mandataris>;
|
||||
<http://www.w3.org/ns/org#holds> ?mandate;
|
||||
?p ?o.
|
||||
|
||||
?orgaanInTime <http://www.w3.org/ns/org#hasPost> ?mandate ;
|
||||
<http://data.vlaanderen.be/ns/mandaat#isTijdspecialisatieVan> ?orgaan .
|
||||
|
||||
?orgaan <http://data.vlaanderen.be/ns/besluit#bestuurt> ?bestuur .
|
||||
?bestuur <http://data.vlaanderen.be/ns/besluit#classificatie> ?classification .
|
||||
|
||||
|
||||
FILTER(?classification IN (
|
||||
<http://data.vlaanderen.be/id/concept/BestuurseenheidClassificatieCode/5ab0e9b8a3b2ca7c5e000000>,
|
||||
<http://data.vlaanderen.be/id/concept/BestuurseenheidClassificatieCode/5ab0e9b8a3b2ca7c5e000001>,
|
||||
<http://data.vlaanderen.be/id/concept/BestuurseenheidClassificatieCode/5ab0e9b8a3b2ca7c5e000002>,
|
||||
<http://data.vlaanderen.be/id/concept/BestuurseenheidClassificatieCode/5ab0e9b8a3b2ca7c5e000003>
|
||||
))
|
||||
|
||||
FILTER (?p NOT IN (mandaat:start, mandaat:einde))
|
||||
|
||||
FILTER NOT EXISTS {
|
||||
?s ?p "" .
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
CONSTRUCT {
|
||||
?s ?p ?o.
|
||||
} WHERE {
|
||||
?s a <http://www.w3.org/ns/person#Person>;
|
||||
?p ?o.
|
||||
|
||||
FILTER (?p IN (
|
||||
<http://www.w3.org/1999/02/22-rdf-syntax-ns#type>,
|
||||
<http://xmlns.com/foaf/0.1/familyName>,
|
||||
<http://mu.semte.ch/vocabularies/core/uuid>
|
||||
))
|
||||
|
||||
FILTER NOT EXISTS {
|
||||
?s ?p "" .
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
|
||||
PREFIX persoon: <https://data.vlaanderen.be/ns/persoon#>
|
||||
PREFIX persoon_loket: <http://data.vlaanderen.be/ns/persoon#>
|
||||
PREFIX person: <http://www.w3.org/ns/person#>
|
||||
|
||||
# DL and OP both use persoon:gebruikteVoornaam but with different semantics (!)
|
||||
|
||||
# First name: persoon:gebruikteVoornaam => foaf:givenName
|
||||
# Alternatieve voornaam: foaf:name => persoon:gebruikteVoornaam
|
||||
|
||||
# We do both in one query with an OPTIONAL because they need to happen simultaneously
|
||||
# not to end up in a loop
|
||||
|
||||
# Part 1
|
||||
|
||||
CONSTRUCT {
|
||||
?s persoon:gebruikteVoornaam ?name .
|
||||
} WHERE {
|
||||
?s a person:Person;
|
||||
foaf:name ?name .
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
|
||||
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
|
||||
PREFIX persoon: <https://data.vlaanderen.be/ns/persoon#>
|
||||
PREFIX persoon_loket: <http://data.vlaanderen.be/ns/persoon#>
|
||||
PREFIX person: <http://www.w3.org/ns/person#>
|
||||
|
||||
# DL and OP both use persoon:gebruikteVoornaam but with different semantics (!)
|
||||
|
||||
# First name: persoon:gebruikteVoornaam => foaf:givenName
|
||||
# Alternatieve voornaam: foaf:name => persoon:gebruikteVoornaam
|
||||
|
||||
# We do both in one query with an OPTIONAL because they need to happen simultaneously
|
||||
# not to end up in a loop
|
||||
|
||||
# Part 2
|
||||
|
||||
CONSTRUCT {
|
||||
?s foaf:givenName ?gebruikteVoornaam .
|
||||
} WHERE {
|
||||
?s a person:Person ;
|
||||
persoon_loket:gebruikteVoornaam ?gebruikteVoornaam .
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
PREFIX schema: <http://schema.org/>
|
||||
|
||||
CONSTRUCT {
|
||||
?s schema:telephone ?cleanedPhoneNumber .
|
||||
} WHERE {
|
||||
?s schema:telephone ?phoneNumber .
|
||||
|
||||
# Remove all non digits
|
||||
BIND(REPLACE(?phoneNumber, """[^+\\d]""", "") AS ?scrapeResult)
|
||||
|
||||
# Replace leading 00 with +
|
||||
BIND(REPLACE(?scrapeResult, """^00""", "+") AS ?replacedZeroZero)
|
||||
|
||||
BIND(REPLACE(?replacedZeroZero, """^0""", "+32") AS ?defaultBe)
|
||||
|
||||
BIND(REPLACE(?defaultBe, """\\+320""", "+32") AS ?extendedDefaultBe)
|
||||
|
||||
BIND(REPLACE(?extendedDefaultBe, """^320""", "+32") AS ?finalResult)
|
||||
|
||||
BIND(IF(REGEX(?finalResult, """^\\+((32\\d{8})|(324\\d{8})|((?!32)\\d+))$"""), CONCAT("tel:", ?finalResult), ?phoneNumber) AS ?cleanedPhoneNumber)
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
PREFIX ch: <http://data.lblod.info/vocabularies/contacthub/>
|
||||
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
|
||||
|
||||
CONSTRUCT {
|
||||
?s ch:eindedatum ?endDateTime .
|
||||
} WHERE {
|
||||
?s ch:eindedatum ?endDate .
|
||||
|
||||
BIND(STRDT(CONCAT(STR(?endDate), 'T02:00:00'), xsd:dateTime) as ?endDateTime)
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
PREFIX ch: <http://data.lblod.info/vocabularies/contacthub/>
|
||||
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
|
||||
|
||||
CONSTRUCT {
|
||||
?s ch:startdatum ?startDateTime .
|
||||
} WHERE {
|
||||
?s ch:startdatum ?startDate .
|
||||
|
||||
BIND(STRDT(CONCAT(STR(?startDate), 'T02:00:00'), xsd:dateTime) as ?startDateTime)
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
PREFIX ere: <http://data.lblod.info/vocabularies/erediensten/>
|
||||
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
|
||||
|
||||
CONSTRUCT {
|
||||
?s ere:geplandeEinddatumAanstelling ?dateTime .
|
||||
} WHERE {
|
||||
?s ere:geplandeEinddatumAanstelling ?date .
|
||||
|
||||
BIND(STRDT(CONCAT(STR(?date), 'T02:00:00'), xsd:dateTime) as ?dateTime)
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
PREFIX ch: <http://data.lblod.info/vocabularies/contacthub/>
|
||||
PREFIX dc_terms: <http://purl.org/dc/terms/>
|
||||
PREFIX ere: <http://data.lblod.info/vocabularies/erediensten/>
|
||||
PREFIX lblodlg: <http://data.lblod.info/vocabularies/leidinggevenden/>
|
||||
PREFIX mandaat: <http://data.vlaanderen.be/ns/mandaat#>
|
||||
PREFIX person: <http://www.w3.org/ns/person#>
|
||||
|
||||
CONSTRUCT {
|
||||
?s a dc_terms:Agent .
|
||||
} WHERE {
|
||||
?s a ?type .
|
||||
|
||||
VALUES ?type {
|
||||
lblodlg:Functionaris
|
||||
mandaat:Mandataris
|
||||
ere:EredienstMandataris
|
||||
ere:RolBedienaar
|
||||
person:Person
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
PREFIX ch: <http://data.lblod.info/vocabularies/contacthub/>
|
||||
PREFIX ere: <http://data.lblod.info/vocabularies/erediensten/>
|
||||
PREFIX lblodlg: <http://data.lblod.info/vocabularies/leidinggevenden/>
|
||||
PREFIX mandaat: <http://data.vlaanderen.be/ns/mandaat#>
|
||||
|
||||
CONSTRUCT {
|
||||
?s a ch:AgentInPositie .
|
||||
} WHERE {
|
||||
?s a ?type .
|
||||
|
||||
VALUES ?type {
|
||||
lblodlg:Functionaris
|
||||
mandaat:Mandataris
|
||||
ere:EredienstMandataris
|
||||
ere:RolBedienaar
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
PREFIX org: <http://www.w3.org/ns/org#>
|
||||
|
||||
CONSTRUCT {
|
||||
?o org:holds ?s.
|
||||
}
|
||||
WHERE {
|
||||
?s org:heldBy ?o.
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
PREFIX org: <http://www.w3.org/ns/org#>
|
||||
|
||||
CONSTRUCT {
|
||||
?o org:heldBy ?s.
|
||||
}
|
||||
WHERE {
|
||||
?s org:holds ?o.
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
|
||||
CONSTRUCT {
|
||||
?s ?p ?o.
|
||||
} WHERE {
|
||||
?s a <http://www.w3.org/ns/locn#Address>;
|
||||
?p ?o.
|
||||
|
||||
FILTER NOT EXISTS {
|
||||
?s ?p "" .
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
CONSTRUCT {
|
||||
?s <http://schema.org/contactPoint> ?contactpoint.
|
||||
}
|
||||
WHERE {
|
||||
?s a <http://data.lblod.info/vocabularies/leidinggevenden/Bestuursfunctie>.
|
||||
?s <http://schema.org/contactPoint> ?contactpoint.
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
CONSTRUCT {
|
||||
?s ?p ?o.
|
||||
} WHERE {
|
||||
?s a <http://schema.org/ContactPoint>;
|
||||
?p ?o.
|
||||
|
||||
FILTER (?p NOT IN (<http://schema.org/telephone>))
|
||||
|
||||
FILTER NOT EXISTS {
|
||||
?s ?p "" .
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
PREFIX ch: <http://data.lblod.info/vocabularies/contacthub/>
|
||||
PREFIX ere: <http://data.lblod.info/vocabularies/erediensten/>
|
||||
|
||||
CONSTRUCT {
|
||||
?s ?p ?o.
|
||||
} WHERE {
|
||||
?s a <http://data.lblod.info/vocabularies/erediensten/EredienstMandataris>;
|
||||
?p ?o.
|
||||
|
||||
FILTER (?p NOT IN (ch:startdatum, ch:eindedatum, ere:geplandeEinddatumAanstelling))
|
||||
|
||||
FILTER NOT EXISTS {
|
||||
?s ?p "" .
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
CONSTRUCT {
|
||||
?s ?p ?o.
|
||||
} WHERE {
|
||||
?s a <http://www.w3.org/ns/person#Person>;
|
||||
?p ?o.
|
||||
|
||||
FILTER (?p IN (
|
||||
<http://www.w3.org/1999/02/22-rdf-syntax-ns#type>,
|
||||
<http://mu.semte.ch/vocabularies/core/uuid>,
|
||||
<http://xmlns.com/foaf/0.1/familyName>
|
||||
))
|
||||
|
||||
FILTER NOT EXISTS {
|
||||
?s ?p "" .
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
CONSTRUCT {
|
||||
?s ?p ?o.
|
||||
} WHERE {
|
||||
?s a <http://data.lblod.info/vocabularies/erediensten/RolBedienaar>;
|
||||
?p ?o.
|
||||
|
||||
FILTER NOT EXISTS {
|
||||
?s ?p "" .
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
|
||||
PREFIX persoon: <https://data.vlaanderen.be/ns/persoon#>
|
||||
PREFIX person: <http://www.w3.org/ns/person#>
|
||||
|
||||
# DL and OP both use persoon:gebruikteVoornaam but with different semantics (!)
|
||||
|
||||
# Alternatieve voornaam: foaf:name => persoon:gebruikteVoornaam
|
||||
|
||||
CONSTRUCT {
|
||||
?s persoon:gebruikteVoornaam ?name .
|
||||
} WHERE {
|
||||
?s a person:Person ;
|
||||
foaf:name ?name .
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
|
||||
PREFIX persoon_loket: <http://data.vlaanderen.be/ns/persoon#>
|
||||
PREFIX person: <http://www.w3.org/ns/person#>
|
||||
|
||||
# DL and OP both use persoon:gebruikteVoornaam but with different semantics (!)
|
||||
|
||||
# First name: persoon:gebruikteVoornaam => foaf:givenName
|
||||
|
||||
CONSTRUCT {
|
||||
?s foaf:givenName ?gebruikteVoornaam .
|
||||
} WHERE {
|
||||
?s a person:Person ;
|
||||
persoon_loket:gebruikteVoornaam ?gebruikteVoornaam .
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
CONSTRUCT {
|
||||
?s ?p ?o.
|
||||
} WHERE {
|
||||
?s a <http://data.vlaanderen.be/ns/persoon#Geboorte>;
|
||||
?p ?o.
|
||||
|
||||
FILTER NOT EXISTS {
|
||||
?s ?p "" .
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
PREFIX persoon: <https://data.vlaanderen.be/ns/persoon#>
|
||||
PREFIX persoon_loket: <http://data.vlaanderen.be/ns/persoon#>
|
||||
|
||||
# Map from http persoon to https persoon namespace
|
||||
|
||||
CONSTRUCT {
|
||||
?s a persoon:Geboorte
|
||||
} WHERE {
|
||||
?s a persoon_loket:Geboorte .
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
PREFIX persoon: <https://data.vlaanderen.be/ns/persoon#>
|
||||
PREFIX persoon_loket: <http://data.vlaanderen.be/ns/persoon#>
|
||||
|
||||
# Map from http persoon to https persoon namespace
|
||||
|
||||
CONSTRUCT {
|
||||
?s persoon:datum ?o .
|
||||
} WHERE {
|
||||
?s persoon_loket:datum ?o .
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
PREFIX persoon: <https://data.vlaanderen.be/ns/persoon#>
|
||||
PREFIX persoon_loket: <http://data.vlaanderen.be/ns/persoon#>
|
||||
|
||||
# Map from http persoon to https persoon namespace
|
||||
|
||||
CONSTRUCT {
|
||||
?s persoon:geslacht ?o .
|
||||
} WHERE {
|
||||
?s persoon_loket:geslacht ?o .
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
PREFIX persoon: <https://data.vlaanderen.be/ns/persoon#>
|
||||
PREFIX persoon_loket: <http://data.vlaanderen.be/ns/persoon#>
|
||||
|
||||
# Map from http persoon to https persoon namespace
|
||||
|
||||
CONSTRUCT {
|
||||
?s persoon:heeftGeboorte ?o .
|
||||
} WHERE {
|
||||
?s persoon_loket:heeftGeboorte ?o .
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
PREFIX persoon: <https://data.vlaanderen.be/ns/persoon#>
|
||||
PREFIX persoon_loket: <http://data.vlaanderen.be/ns/persoon#>
|
||||
|
||||
# Map from http persoon to https persoon namespace
|
||||
|
||||
CONSTRUCT {
|
||||
?s persoon:heeftNationaliteit ?o .
|
||||
} WHERE {
|
||||
?s persoon_loket:heeftNationaliteit ?o .
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
PREFIX persoon: <https://data.vlaanderen.be/ns/persoon#>
|
||||
PREFIX persoon_loket: <http://data.vlaanderen.be/ns/persoon#>
|
||||
|
||||
# Map from http persoon to https persoon namespace
|
||||
|
||||
CONSTRUCT {
|
||||
?s persoon:registratie ?o .
|
||||
} WHERE {
|
||||
?s persoon_loket:registratie ?o .
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
PREFIX generiek: <https://data.vlaanderen.be/ns/generiek#>
|
||||
PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
|
||||
PREFIX mu: <http://mu.semte.ch/vocabularies/core/>
|
||||
|
||||
CONSTRUCT {
|
||||
?identifier
|
||||
generiek:gestructureerdeIdentificator ?structuredIdentifier ;
|
||||
skos:notation "Rijksregisternummer" .
|
||||
|
||||
?structuredIdentifier a generiek:GestructureerdeIdentificator ;
|
||||
mu:uuid ?uuid ;
|
||||
generiek:lokaleIdentificator ?notation .
|
||||
}
|
||||
WHERE {
|
||||
?identifier skos:notation ?notation.
|
||||
|
||||
BIND(MD5(CONCAT(STR(?identifier),"STRUCTURED_IDENTIFIER")) as ?uuid)
|
||||
BIND(IRI(CONCAT("http://data.lblod.info/id/gestructureerdeIdentificatoren/", ?uuid)) AS ?structuredIdentifier)
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
PREFIX adms: <http://www.w3.org/ns/adms#>
|
||||
PREFIX persoon: <https://data.vlaanderen.be/ns/persoon#>
|
||||
|
||||
# identifier property in the export is only used for RRN.
|
||||
CONSTRUCT {
|
||||
?person persoon:registratie ?rrn .
|
||||
}
|
||||
WHERE {
|
||||
?person adms:identifier ?rrn .
|
||||
}
|
||||
@@ -1,40 +0,0 @@
|
||||
const BATCH_SIZE = parseInt(process.env.BATCH_SIZE) || 100;
|
||||
const MU_CALL_SCOPE_ID_INITIAL_SYNC = process.env.MU_CALL_SCOPE_ID_INITIAL_SYNC || 'http://redpencil.data.gift/id/concept/muScope/deltas/consumer/initialSync';
|
||||
const BYPASS_MU_AUTH_FOR_EXPENSIVE_QUERIES = process.env.BYPASS_MU_AUTH_FOR_EXPENSIVE_QUERIES == 'true' ? true : false;
|
||||
const DIRECT_DATABASE_ENDPOINT = process.env.DIRECT_DATABASE_ENDPOINT || 'http://triplestore:8890/sparql';
|
||||
const MAX_DB_RETRY_ATTEMPTS = parseInt(process.env.MAX_DB_RETRY_ATTEMPTS || 5);
|
||||
const MAX_REASONING_RETRY_ATTEMPTS = parseInt(process.env.MAX_REASONING_RETRY_ATTEMPTS || 5);
|
||||
const SLEEP_BETWEEN_BATCHES = parseInt(process.env.SLEEP_BETWEEN_BATCHES || 1000);
|
||||
const SLEEP_TIME_AFTER_FAILED_REASONING_OPERATION = parseInt(process.env.SLEEP_TIME_AFTER_FAILED_REASONING_OPERATION || 10000);
|
||||
const SLEEP_TIME_AFTER_FAILED_DB_OPERATION = parseInt(process.env.SLEEP_TIME_AFTER_FAILED_DB_OPERATION || 60000);
|
||||
|
||||
// Graphs
|
||||
const TARGET_GRAPH = process.env.TARGET_GRAPH || `http://mu.semte.ch/graphs/worship-service`;
|
||||
const PRIVACY_SENSITIVE_GRAPH = process.env.PRIVACY_SENSITIVE_GRAPH || `http://mu.semte.ch/graphs/worship-privacy-centric-graph`;
|
||||
const LANDING_ZONE_GRAPH = process.env.DCR_LANDING_ZONE_GRAPH || `http://mu.semte.ch/graphs/landing-zone/leidinggevenden`;
|
||||
|
||||
// Mappings
|
||||
const MAIN_INFO_MAPPING = "main-info";
|
||||
const PRIVATE_INFO_MAPPING = "private-info";
|
||||
|
||||
// ENDPOINTS
|
||||
const LANDING_ZONE_DATABASE = process.env.DCR_LANDING_ZONE_DATABASE || 'db';
|
||||
const LANDING_ZONE_DATABASE_ENDPOINT = process.env.DCR_LANDING_ZONE_DATABASE_ENDPOINT || `http://${LANDING_ZONE_DATABASE}:8890/sparql`;
|
||||
|
||||
module.exports = {
|
||||
BATCH_SIZE,
|
||||
MU_CALL_SCOPE_ID_INITIAL_SYNC,
|
||||
BYPASS_MU_AUTH_FOR_EXPENSIVE_QUERIES,
|
||||
DIRECT_DATABASE_ENDPOINT,
|
||||
MAX_DB_RETRY_ATTEMPTS,
|
||||
MAX_REASONING_RETRY_ATTEMPTS,
|
||||
SLEEP_BETWEEN_BATCHES,
|
||||
SLEEP_TIME_AFTER_FAILED_DB_OPERATION,
|
||||
SLEEP_TIME_AFTER_FAILED_REASONING_OPERATION,
|
||||
LANDING_ZONE_GRAPH,
|
||||
LANDING_ZONE_DATABASE_ENDPOINT,
|
||||
TARGET_GRAPH,
|
||||
PRIVACY_SENSITIVE_GRAPH,
|
||||
MAIN_INFO_MAPPING,
|
||||
PRIVATE_INFO_MAPPING
|
||||
};
|
||||
@@ -1,11 +0,0 @@
|
||||
const contextConfig = {
|
||||
addTypes: {
|
||||
scope: 'all', // 'inserts, 'deletes', 'all' or none. To add rdf:type to subjects of inserts, deletes or both
|
||||
exhausitive: false, // true or false: find all types for a subject, even if one is already present in delta
|
||||
},
|
||||
contextQueries: []
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
contextConfig
|
||||
};
|
||||
@@ -1,114 +0,0 @@
|
||||
const {
|
||||
transformStatements,
|
||||
deleteFromTargetGraph,
|
||||
insertIntoTargetGraph,
|
||||
deleteFromPrivateGraph,
|
||||
insertIntoPrivateGraph
|
||||
} = require('./util');
|
||||
|
||||
const {
|
||||
MAIN_INFO_MAPPING,
|
||||
PRIVATE_INFO_MAPPING
|
||||
} = require('./config');
|
||||
|
||||
/**
|
||||
* Dispatch the fetched information to a target graph.
|
||||
* Note: <share://file/data> will be ADDED to it's own graph.
|
||||
* We take only care of adding them, not updating triples, this is a TODO
|
||||
* @param { mu, muAuthSudo } lib - The provided libraries from the host service.
|
||||
* @param { termObjectChangeSets: { deletes, inserts } } data - The fetched changes sets, which objects of serialized Terms
|
||||
* [ {
|
||||
* graph: "<http://foo>",
|
||||
* subject: "<http://bar>",
|
||||
* predicate: "<http://baz>",
|
||||
* object: "<http://boom>^^<http://datatype>"
|
||||
* }
|
||||
* ]
|
||||
* @return {void} Nothing
|
||||
*/
|
||||
async function dispatch(lib, data) {
|
||||
const { mu, fetch } = lib;
|
||||
let { termObjectChangeSets, termObjectChangeSetsWithContext } = data;
|
||||
|
||||
// Both arrays are the same length, so we can zip them together for easier processing
|
||||
zippedChangeSets = termObjectChangeSets.map((o, i) => ({
|
||||
original: o,
|
||||
withContext: termObjectChangeSetsWithContext[i]
|
||||
}));
|
||||
|
||||
console.log(`Received ${zippedChangeSets.length} change sets`)
|
||||
|
||||
for (let { original, withContext } of zippedChangeSets) {
|
||||
let originalDeletes, originalInserts, insertsWithContext, deletesWithContext;
|
||||
try {
|
||||
originalInserts = original.inserts.map(o => `${o.subject} ${o.predicate} ${o.object}.`);
|
||||
originalDeletes = original.deletes.map(o => `${o.subject} ${o.predicate} ${o.object}.`);
|
||||
} catch (e) {
|
||||
console.log(`Error while processing change set: ${e}`);
|
||||
console.log(`Original change set: ${JSON.stringify(original)}`);
|
||||
throw e;
|
||||
}
|
||||
|
||||
// Extra context needed for mapping from DL to OP model and filtering based on type.
|
||||
try {
|
||||
insertsWithContext = withContext.inserts.map(o => `${o.subject} ${o.predicate} ${o.object}.`);
|
||||
deletesWithContext = withContext.deletes.map(o => `${o.subject} ${o.predicate} ${o.object}.`);
|
||||
} catch (e) {
|
||||
console.log(`Error while processing change set with context: ${e}`);
|
||||
console.log(`Change set with context: ${JSON.stringify(withContext)}`);
|
||||
throw e;
|
||||
}
|
||||
|
||||
if (originalDeletes.length) {
|
||||
// Map main deletes from DL to OP model
|
||||
const transformedMainDeletes = await transformStatements(fetch, deletesWithContext, MAIN_INFO_MAPPING);
|
||||
|
||||
if (!transformedMainDeletes.length) {
|
||||
console.log(`Warn: Delete main statements mapped to empty result.`);
|
||||
console.log(`Input: ${deletesWithContext}`);
|
||||
console.log(`Output: ${transformedMainDeletes}`);
|
||||
} else {
|
||||
await deleteFromTargetGraph(lib, transformedMainDeletes);
|
||||
}
|
||||
|
||||
// Map private deletes from DL to OP model
|
||||
const transformedPrivateDeletes = await transformStatements(fetch, deletesWithContext, PRIVATE_INFO_MAPPING);
|
||||
|
||||
if (!transformedPrivateDeletes.length) {
|
||||
console.log(`Warn: Delete private statements mapped to empty result.`);
|
||||
console.log(`Input: ${deletesWithContext}`);
|
||||
console.log(`Output: ${transformedPrivateDeletes}`);
|
||||
} else {
|
||||
await deleteFromPrivateGraph(lib, transformedDeletes);
|
||||
}
|
||||
}
|
||||
|
||||
if (originalInserts.length) {
|
||||
// Map main inserts from DL to OP model
|
||||
const transformedMainInserts = await transformStatements(fetch, insertsWithContext, MAIN_INFO_MAPPING);
|
||||
|
||||
if (!transformedMainInserts.length) {
|
||||
console.log(`Warn: Insert statements mapped to empty result.`);
|
||||
console.log(`Input: ${insertsWithContext}`);
|
||||
console.log(`Output: ${transformedMainInserts}`);
|
||||
} else {
|
||||
await insertIntoTargetGraph(lib, transformedMainInserts);
|
||||
}
|
||||
|
||||
// Map private inserts from DL to OP model
|
||||
const transformedPrivateInserts = await transformStatements(fetch, insertsWithContext, PRIVATE_INFO_MAPPING);
|
||||
|
||||
if (!transformedPrivateInserts.length) {
|
||||
console.log(`Warn: Insert statements mapped to empty result.`);
|
||||
console.log(`Input: ${insertsWithContext}`);
|
||||
console.log(`Output: ${transformedPrivateInserts}`);
|
||||
} else {
|
||||
await insertIntoPrivateGraph(lib, transformedPrivateInserts);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
dispatch
|
||||
};
|
||||
@@ -1,106 +0,0 @@
|
||||
const { batchedDbUpdate, transformLandingZoneGraph } = require('./util');
|
||||
const {
|
||||
BYPASS_MU_AUTH_FOR_EXPENSIVE_QUERIES,
|
||||
DIRECT_DATABASE_ENDPOINT,
|
||||
MU_CALL_SCOPE_ID_INITIAL_SYNC,
|
||||
BATCH_SIZE,
|
||||
MAX_DB_RETRY_ATTEMPTS,
|
||||
SLEEP_BETWEEN_BATCHES,
|
||||
SLEEP_TIME_AFTER_FAILED_DB_OPERATION,
|
||||
TARGET_GRAPH,
|
||||
PRIVACY_SENSITIVE_GRAPH,
|
||||
LANDING_ZONE_GRAPH,
|
||||
LANDING_ZONE_DATABASE_ENDPOINT,
|
||||
MAIN_INFO_MAPPING,
|
||||
PRIVATE_INFO_MAPPING
|
||||
} = require('./config');
|
||||
|
||||
const endpoint = BYPASS_MU_AUTH_FOR_EXPENSIVE_QUERIES ? DIRECT_DATABASE_ENDPOINT : process.env.MU_SPARQL_ENDPOINT;
|
||||
|
||||
/**
|
||||
* Dispatch the fetched information to a target graph.
|
||||
* @param { mu, muAuthSudo } lib - The provided libraries from the host service.
|
||||
* @param { termObjects } data - The fetched quad information, which objects of serialized Terms
|
||||
* [ {
|
||||
* graph: "<http://foo>",
|
||||
* subject: "<http://bar>",
|
||||
* predicate: "<http://baz>",
|
||||
* object: "<http://boom>^^<http://datatype>"
|
||||
* }
|
||||
* ]
|
||||
* @return {void} Nothing
|
||||
*/
|
||||
async function dispatch(lib, data) {
|
||||
const { mu, muAuthSudo } = lib;
|
||||
const { termObjects } = data;
|
||||
|
||||
// Steps:
|
||||
// 1. Write the triples to the landing zone graph - withouth any mapping or filtering
|
||||
// 2. One-time reasoning run with the full landing zone graph and write the results to the target graph (on-finish)
|
||||
|
||||
if (BYPASS_MU_AUTH_FOR_EXPENSIVE_QUERIES) {
|
||||
console.warn(`Service configured to skip MU_AUTH!`);
|
||||
}
|
||||
console.log(`Using ${endpoint} to insert triples`);
|
||||
|
||||
if (termObjects.length) {
|
||||
const originalInsertTriples = termObjects.map(o => `${o.subject} ${o.predicate} ${o.object}.`);
|
||||
|
||||
await batchedDbUpdate(
|
||||
muAuthSudo.updateSudo,
|
||||
LANDING_ZONE_GRAPH,
|
||||
originalInsertTriples,
|
||||
{ 'mu-call-scope-id': MU_CALL_SCOPE_ID_INITIAL_SYNC },
|
||||
LANDING_ZONE_DATABASE_ENDPOINT,
|
||||
BATCH_SIZE,
|
||||
MAX_DB_RETRY_ATTEMPTS,
|
||||
SLEEP_BETWEEN_BATCHES,
|
||||
SLEEP_TIME_AFTER_FAILED_DB_OPERATION
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
async function onFinishInitialIngest(lib) {
|
||||
const { muAuthSudo, fetch } = lib;
|
||||
|
||||
console.log(`!! On-finish triggered !!`);
|
||||
|
||||
const transformedMainInsertTriples = await transformLandingZoneGraph(fetch, endpoint, MAIN_INFO_MAPPING);
|
||||
console.log(`Transformed ${transformedMainInsertTriples.length} main triples`);
|
||||
|
||||
if (transformedMainInsertTriples.length) {
|
||||
await batchedDbUpdate(
|
||||
muAuthSudo.updateSudo,
|
||||
TARGET_GRAPH,
|
||||
transformedMainInsertTriples,
|
||||
{ 'mu-call-scope-id': MU_CALL_SCOPE_ID_INITIAL_SYNC },
|
||||
endpoint,
|
||||
BATCH_SIZE,
|
||||
MAX_DB_RETRY_ATTEMPTS,
|
||||
SLEEP_BETWEEN_BATCHES,
|
||||
SLEEP_TIME_AFTER_FAILED_DB_OPERATION
|
||||
);
|
||||
}
|
||||
|
||||
const transformedPrivateInsertTriples = await transformLandingZoneGraph(fetch, endpoint, PRIVATE_INFO_MAPPING);
|
||||
console.log(`Transformed ${transformedPrivateInsertTriples.length} private triples`);
|
||||
|
||||
if (transformedPrivateInsertTriples.length) {
|
||||
await batchedDbUpdate(
|
||||
muAuthSudo.updateSudo,
|
||||
PRIVACY_SENSITIVE_GRAPH,
|
||||
transformedPrivateInsertTriples,
|
||||
{ 'mu-call-scope-id': MU_CALL_SCOPE_ID_INITIAL_SYNC },
|
||||
endpoint,
|
||||
BATCH_SIZE,
|
||||
MAX_DB_RETRY_ATTEMPTS,
|
||||
SLEEP_BETWEEN_BATCHES,
|
||||
SLEEP_TIME_AFTER_FAILED_DB_OPERATION
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
dispatch,
|
||||
onFinishInitialIngest
|
||||
};
|
||||
@@ -1,204 +0,0 @@
|
||||
const {
|
||||
MAX_REASONING_RETRY_ATTEMPTS,
|
||||
SLEEP_TIME_AFTER_FAILED_REASONING_OPERATION,
|
||||
MAX_DB_RETRY_ATTEMPTS,
|
||||
SLEEP_BETWEEN_BATCHES,
|
||||
SLEEP_TIME_AFTER_FAILED_DB_OPERATION,
|
||||
TARGET_GRAPH,
|
||||
PRIVACY_SENSITIVE_GRAPH,
|
||||
LANDING_ZONE_GRAPH,
|
||||
BATCH_SIZE
|
||||
} = require('./config');
|
||||
|
||||
async function batchedDbUpdate(
|
||||
muUpdate,
|
||||
graph,
|
||||
triples,
|
||||
extraHeaders,
|
||||
endpoint,
|
||||
batchSize,
|
||||
maxAttempts,
|
||||
sleepBetweenBatches = 1000,
|
||||
sleepTimeOnFail = 1000,
|
||||
operation = 'INSERT'
|
||||
) {
|
||||
|
||||
for (let i = 0; i < triples.length; i += batchSize) {
|
||||
console.log(`Inserting triples in batch: ${i}-${i + batchSize}`);
|
||||
|
||||
const batch = triples.slice(i, i + batchSize).join('\n');
|
||||
|
||||
const insertCall = async () => {
|
||||
await muUpdate(`
|
||||
${operation} DATA {
|
||||
GRAPH <${graph}> {
|
||||
${batch}
|
||||
}
|
||||
}
|
||||
`, extraHeaders, endpoint);
|
||||
};
|
||||
|
||||
await operationWithRetry(insertCall, 0, maxAttempts, sleepTimeOnFail);
|
||||
|
||||
console.log(`Sleeping before next query execution: ${sleepBetweenBatches}`);
|
||||
await new Promise(r => setTimeout(r, sleepBetweenBatches));
|
||||
}
|
||||
}
|
||||
|
||||
async function operationWithRetry(callback,
|
||||
attempt,
|
||||
maxAttempts,
|
||||
sleepTimeOnFail) {
|
||||
try {
|
||||
if (typeof callback === "function")
|
||||
return await callback();
|
||||
else // Catch error from promise - not how I would do it normally, but allows re use of existing code.
|
||||
return await callback;
|
||||
}
|
||||
catch (e) {
|
||||
console.log(`Operation failed for ${callback.toString()}, attempt: ${attempt} of ${maxAttempts}`);
|
||||
console.log(`Error: ${e}`);
|
||||
console.log(`Sleeping ${sleepTimeOnFail} ms`);
|
||||
|
||||
if (attempt >= maxAttempts) {
|
||||
console.log(`Max attempts reached for ${callback.toString()}, giving up`);
|
||||
throw e;
|
||||
}
|
||||
|
||||
await new Promise(r => setTimeout(r, sleepTimeOnFail));
|
||||
return operationWithRetry(callback, ++attempt, maxAttempts, sleepTimeOnFail);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Splits an array into two parts, a part that passes and a part that fails a predicate function.
|
||||
* Credits: https://github.com/benjay10
|
||||
* @public
|
||||
* @function partition
|
||||
* @param {Array} arr - Array to be partitioned
|
||||
* @param {Function} fn - Function that accepts single argument: an element of the array, and should return a truthy or falsy value.
|
||||
* @returns {Object} Object that contains keys passes and fails, each representing an array with elemets that pass or fail the predicate respectively
|
||||
*/
|
||||
function partition(arr, fn) {
|
||||
let passes = [], fails = [];
|
||||
arr.forEach((item) => (fn(item) ? passes : fails).push(item));
|
||||
return { passes, fails };
|
||||
}
|
||||
|
||||
/**
|
||||
* Send triples to reasoning service for conversion
|
||||
*
|
||||
*/
|
||||
async function transformTriples(fetch, triples, mapping) {
|
||||
return await operationWithRetry(mainConversion(fetch, triples, mapping), 0,
|
||||
MAX_REASONING_RETRY_ATTEMPTS, SLEEP_TIME_AFTER_FAILED_REASONING_OPERATION);
|
||||
}
|
||||
|
||||
async function mainConversion(fetch, triples, mapping) {
|
||||
let formdata = new URLSearchParams();
|
||||
formdata.append("data", triples);
|
||||
|
||||
let requestOptions = {
|
||||
method: 'POST',
|
||||
body: formdata,
|
||||
redirect: 'follow'
|
||||
};
|
||||
|
||||
const response = await fetch(`http://reasoner/reason/dl2op/${mapping}`, requestOptions)
|
||||
return await response.text();
|
||||
}
|
||||
|
||||
async function transformStatements(fetch, triples, mapping = 'main') {
|
||||
console.log(`Received ${JSON.stringify(triples)} to transform`);
|
||||
const transformedTriples = await transformTriples(fetch, triples.join('\n'), mapping);
|
||||
statements = transformedTriples ? transformedTriples.replace(/\n{2,}/g, '').split('\n') : [];
|
||||
console.log(`CONVERSION: FROM ${triples.length} triples to ${statements.length}`);
|
||||
return statements;
|
||||
}
|
||||
|
||||
async function deleteFromTargetGraph(lib, statements) {
|
||||
console.log(`Deleting ${statements.length} statements from target graph`);
|
||||
console.log(`Statements: ${JSON.stringify(statements)}`)
|
||||
await batchedDbUpdate(
|
||||
lib.muAuthSudo.updateSudo,
|
||||
TARGET_GRAPH,
|
||||
statements,
|
||||
{},
|
||||
process.env.MU_SPARQL_ENDPOINT,
|
||||
BATCH_SIZE,
|
||||
MAX_DB_RETRY_ATTEMPTS,
|
||||
SLEEP_BETWEEN_BATCHES,
|
||||
SLEEP_TIME_AFTER_FAILED_DB_OPERATION,
|
||||
'DELETE');
|
||||
}
|
||||
|
||||
async function deleteFromPrivateGraph(lib, statements) {
|
||||
console.log(`Deleting ${statements.length} statements from target graph`);
|
||||
console.log(`Statements: ${JSON.stringify(statements)}`)
|
||||
await batchedDbUpdate(
|
||||
lib.muAuthSudo.updateSudo,
|
||||
PRIVACY_SENSITIVE_GRAPH,
|
||||
statements,
|
||||
{},
|
||||
process.env.MU_SPARQL_ENDPOINT,
|
||||
BATCH_SIZE,
|
||||
MAX_DB_RETRY_ATTEMPTS,
|
||||
SLEEP_BETWEEN_BATCHES,
|
||||
SLEEP_TIME_AFTER_FAILED_DB_OPERATION,
|
||||
'DELETE');
|
||||
}
|
||||
|
||||
async function insertIntoTargetGraph(lib, statements) {
|
||||
console.log(`Inserting ${statements.length} statements into target graph`);
|
||||
console.log(`Statements: ${JSON.stringify(statements)}`)
|
||||
|
||||
await batchedDbUpdate(
|
||||
lib.muAuthSudo.updateSudo,
|
||||
TARGET_GRAPH,
|
||||
statements,
|
||||
{},
|
||||
process.env.MU_SPARQL_ENDPOINT,
|
||||
BATCH_SIZE,
|
||||
MAX_DB_RETRY_ATTEMPTS,
|
||||
SLEEP_BETWEEN_BATCHES,
|
||||
SLEEP_TIME_AFTER_FAILED_DB_OPERATION,
|
||||
'INSERT');
|
||||
}
|
||||
|
||||
async function insertIntoPrivateGraph(lib, statements) {
|
||||
console.log(`Inserting ${statements.length} statements into target graph`);
|
||||
console.log(`Statements: ${JSON.stringify(statements)}`)
|
||||
|
||||
await batchedDbUpdate(
|
||||
lib.muAuthSudo.updateSudo,
|
||||
PRIVACY_SENSITIVE_GRAPH,
|
||||
statements,
|
||||
{},
|
||||
process.env.MU_SPARQL_ENDPOINT,
|
||||
BATCH_SIZE,
|
||||
MAX_DB_RETRY_ATTEMPTS,
|
||||
SLEEP_BETWEEN_BATCHES,
|
||||
SLEEP_TIME_AFTER_FAILED_DB_OPERATION,
|
||||
'INSERT');
|
||||
}
|
||||
|
||||
async function transformLandingZoneGraph(fetch, endpoint, mapping = 'main') {
|
||||
console.log(`Transforming landing zone graph: ${LANDING_ZONE_GRAPH}`);
|
||||
|
||||
const response = await fetch(`http://reasoner/reason/dl2op/${mapping}?data=${encodeURIComponent(`${endpoint}?default-graph-uri=&query=CONSTRUCT+%7B%0D%0A%3Fs+%3Fp+%3Fo%0D%0A%7D+WHERE+%7B%0D%0A+GRAPH+<${LANDING_ZONE_GRAPH}>+%7B%0D%0A%3Fs+%3Fp+%3Fo%0D%0A%7D%0D%0A%7D&should-sponge=&format=text%2Fplain&timeout=0&run=+Run+Query`)}`);
|
||||
const text = await response.text();
|
||||
const statements = text.replace(/\n{2,}/g, '').split('\n');
|
||||
|
||||
return statements;
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
batchedDbUpdate,
|
||||
partition,
|
||||
transformStatements,
|
||||
transformLandingZoneGraph,
|
||||
deleteFromTargetGraph,
|
||||
insertIntoTargetGraph,
|
||||
deleteFromPrivateGraph,
|
||||
insertIntoPrivateGraph
|
||||
};
|
||||
15
config/migrations-sample/README.md
Normal file
15
config/migrations-sample/README.md
Normal file
@@ -0,0 +1,15 @@
|
||||
# Motivation
|
||||
|
||||
This folder contains migration files that are typically executed on an as-needed, or ad hoc, basis.
|
||||
In addition, these files can function as templates or provide inspiration for future migrations.
|
||||
|
||||
## Warning
|
||||
|
||||
- Please keep in mind, when adding these files to the migrations folder, it's important to rename them according to the conventions established by the migration service
|
||||
- As the data model or the data location may undergo changes over time, it's imporant to have a clear understanding of the implications when using these files.
|
||||
|
||||
## Template files
|
||||
|
||||
- `pseudonimyze-data.sparql-template` - the file that contains the sparql for pseudonymizing data in the triplestore. It should run every time the db is "refreshed" with a copy from PROD.
|
||||
- `remove-stale-jobs.sparql-template` - removing `busy` and `scheduled` jobs.
|
||||
- `remove-type-in-producer-graph.sparql-template` - the migration to handle the occasional sync issue between OP and Loket.
|
||||
149
config/migrations-sample/pseudonimyze-data.sparql-template
Normal file
149
config/migrations-sample/pseudonimyze-data.sparql-template
Normal file
@@ -0,0 +1,149 @@
|
||||
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
|
||||
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
|
||||
PREFIX person: <http://www.w3.org/ns/person#>
|
||||
PREFIX persoon: <https://data.vlaanderen.be/ns/persoon#>
|
||||
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
|
||||
PREFIX schema: <http://schema.org/>
|
||||
PREFIX mandaat: <http://data.vlaanderen.be/ns/mandaat#>
|
||||
PREFIX locn: <http://www.w3.org/ns/locn#>
|
||||
PREFIX adres: <https://data.vlaanderen.be/ns/adres#>
|
||||
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
|
||||
PREFIX generiek: <https://data.vlaanderen.be/ns/generiek#>
|
||||
|
||||
DELETE {
|
||||
GRAPH ?g {
|
||||
?person foaf:familyName ?fn.
|
||||
?person foaf:givenName ?gn.
|
||||
?person persoon:gebruikteVoornaam ?gvn.
|
||||
}
|
||||
} INSERT {
|
||||
GRAPH ?g {
|
||||
?person foaf:givenName ?gn_s.
|
||||
?person foaf:familyName ?fn_s.
|
||||
?person persoon:gebruikteVoornaam ?gvn_s.
|
||||
}
|
||||
} WHERE {
|
||||
VALUES ?g { <http://mu.semte.ch/graphs/organisatieportaal> <http://redpencil.data.gift/id/deltas/producer/organizations>}
|
||||
GRAPH ?g {
|
||||
BIND("njbyevfeRTE8651B" AS ?salt).
|
||||
?person a person:Person.
|
||||
OPTIONAL {
|
||||
?person foaf:givenName ?gn.
|
||||
BIND(SHA1(CONCAT(?salt, ?gn)) AS ?gn_s).
|
||||
}
|
||||
OPTIONAL {
|
||||
?person foaf:familyName ?fn.
|
||||
BIND(SHA1(CONCAT(?salt, ?fn)) AS ?fn_s).
|
||||
}
|
||||
OPTIONAL {
|
||||
?person persoon:gebruikteVoornaam ?gvn.
|
||||
BIND(SHA1(CONCAT(?salt, ?gvn)) AS ?gvn_s).
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
;
|
||||
|
||||
DELETE {
|
||||
GRAPH ?h {
|
||||
?birth persoon:datum ?dob.
|
||||
?identificator generiek:lokaleIdentificator ?rrn .
|
||||
?person persoon:heeftNationaliteit ?nationality .
|
||||
?person persoon:geslacht ?gender .
|
||||
}
|
||||
} INSERT {
|
||||
GRAPH ?h {
|
||||
?birth persoon:datum "1977-01-01T00:00:00Z"^^xsd:dateTime .
|
||||
?identificator generiek:lokaleIdentificator "42012205181" .
|
||||
}
|
||||
} WHERE {
|
||||
VALUES ?g { <http://mu.semte.ch/graphs/organisatieportaal> <http://redpencil.data.gift/id/deltas/producer/organizations>}
|
||||
VALUES ?h { <http://mu.semte.ch/graphs/privacy-centric-graph> }
|
||||
GRAPH ?g {
|
||||
?person a person:Person.
|
||||
}
|
||||
GRAPH ?h {
|
||||
OPTIONAL {
|
||||
?person persoon:heeftGeboorte ?birth .
|
||||
?birth persoon:datum ?dob.
|
||||
}
|
||||
OPTIONAL {
|
||||
?person persoon:registratie/generiek:gestructureerdeIdentificator ?identificator .
|
||||
?identificator generiek:lokaleIdentificator ?rrn .
|
||||
}
|
||||
OPTIONAL {
|
||||
?person persoon:geslacht ?gender .
|
||||
}
|
||||
OPTIONAL {
|
||||
?person persoon:heeftNationaliteit ?nationality .
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
;
|
||||
|
||||
DELETE {
|
||||
GRAPH ?g {
|
||||
?cp schema:telephone ?phone.
|
||||
?cp schema:email ?mail.
|
||||
?address locn:fullAddress ?fa.
|
||||
?address adres:Adresvoorstelling.huisnummer ?huisnr.
|
||||
?address adres:Adresvoorstelling.busnummer ?busnr.
|
||||
?address locn:thoroughfare ?street.
|
||||
?address locn:postCode ?postCode.
|
||||
?address adres:gemeentenaam ?gemeente.
|
||||
}
|
||||
} INSERT {
|
||||
GRAPH ?g {
|
||||
?cp schema:telephone ?phone_s.
|
||||
?cp schema:email ?mail_s.
|
||||
?address locn:fullAddress ?fa_s.
|
||||
?address adres:Adresvoorstelling.huisnummer ?huisnr_s.
|
||||
?address adres:Adresvoorstelling.busnummer ?busnr_s.
|
||||
?address locn:thoroughfare ?street_s.
|
||||
?address locn:postCode ?postCode_s.
|
||||
?address adres:gemeentenaam ?gemeente_s.
|
||||
}
|
||||
} WHERE {
|
||||
VALUES ?g { <http://mu.semte.ch/graphs/organisatieportaal> <http://redpencil.data.gift/id/deltas/producer/organizations>}
|
||||
GRAPH ?g {
|
||||
BIND("njbyevfeRTE8651B" AS ?salt).
|
||||
?cp a <http://schema.org/ContactPoint> .
|
||||
|
||||
OPTIONAL {
|
||||
?cp schema:telephone ?phone.
|
||||
BIND(SHA1(CONCAT(?salt, ?phone)) AS ?phone_s).
|
||||
}
|
||||
OPTIONAL {
|
||||
?cp schema:email ?mail.
|
||||
BIND(CONCAT(SHA1(CONCAT(?salt, ?mail)), "@email.com") AS ?mail_s).
|
||||
}
|
||||
OPTIONAL {
|
||||
?cp locn:address ?address.
|
||||
OPTIONAL {
|
||||
?address locn:fullAddress ?fa.
|
||||
BIND(SHA1(CONCAT(?salt, ?fa)) AS ?fa_s).
|
||||
}
|
||||
OPTIONAL {
|
||||
?address adres:Adresvoorstelling.huisnummer ?huisnr.
|
||||
BIND(SHA1(CONCAT(?salt, ?huisnr)) AS ?huisnr_s).
|
||||
}
|
||||
OPTIONAL {
|
||||
?address adres:Adresvoorstelling.busnummer ?busnr.
|
||||
BIND(SHA1(CONCAT(?salt, ?busnr)) AS ?busnr_s).
|
||||
}
|
||||
OPTIONAL {
|
||||
?address locn:thoroughfare ?street.
|
||||
BIND(SHA1(CONCAT(?salt, ?street)) AS ?street_s).
|
||||
}
|
||||
OPTIONAL {
|
||||
?address locn:postCode ?postCode.
|
||||
BIND(SHA1(CONCAT(?salt, ?postCode)) AS ?postCode_s).
|
||||
}
|
||||
OPTIONAL {
|
||||
?address adres:gemeentenaam ?gemeente.
|
||||
BIND(SHA1(CONCAT(?salt, ?gemeente)) AS ?gemeente_s).
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
25
config/migrations-sample/remove-stale-jobs.sparql-template
Normal file
25
config/migrations-sample/remove-stale-jobs.sparql-template
Normal file
@@ -0,0 +1,25 @@
|
||||
PREFIX mu: <http://mu.semte.ch/vocabularies/core/>
|
||||
PREFIX task: <http://redpencil.data.gift/vocabularies/tasks/>
|
||||
PREFIX dct: <http://purl.org/dc/terms/>
|
||||
PREFIX prov: <http://www.w3.org/ns/prov#>
|
||||
PREFIX nie: <http://www.semanticdesktop.org/ontologies/2007/01/19/nie#>
|
||||
PREFIX ext: <http://mu.semte.ch/vocabularies/ext/>
|
||||
PREFIX oslc: <http://open-services.net/ns/core#>
|
||||
PREFIX cogs: <http://vocab.deri.ie/cogs#>
|
||||
PREFIX adms: <http://www.w3.org/ns/adms#>
|
||||
|
||||
DELETE {
|
||||
GRAPH ?g {
|
||||
?jobUri a <http://vocab.deri.ie/cogs#Job>.
|
||||
?jobUri adms:status ?status.
|
||||
?jobUri ?p ?o
|
||||
}
|
||||
}
|
||||
WHERE {
|
||||
GRAPH ?g {
|
||||
?jobUri a <http://vocab.deri.ie/cogs#Job>.
|
||||
?jobUri adms:status ?status.
|
||||
?jobUri ?p ?o
|
||||
FILTER(?status IN (<http://redpencil.data.gift/id/concept/JobStatus/busy>, <http://redpencil.data.gift/id/concept/JobStatus/scheduled>))
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
DELETE WHERE {
|
||||
GRAPH <http://redpencil.data.gift/id/deltas/producer/public> {
|
||||
<http://data.lblod.info/id/besturenVanDeEredienst/4ea0cc455e37195c10acf457a8902ffb> a ?firsttype.
|
||||
<http://data.lblod.info/id/besturenVanDeEredienst/66ce16dcb455dc95588c05916736d511> a ?secondtype.
|
||||
<http://data.lblod.info/id/besturenVanDeEredienst/69dca6d7c6bf9d6073771788358c74e5> a ?thirdtype.
|
||||
<http://data.lblod.info/id/besturenVanDeEredienst/c9ce0539d719b63b60598148b084a7e8> a ?fourthtype.
|
||||
<http://data.lblod.info/id/besturenVanDeEredienst/560d86a055eddb83fd60e0ea3043a708> a ?fifthtype.
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
DELETE DATA {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
<http://data.lblod.info/id/geregistreerdeOrganisaties/8b2e8749-98a9-450f-b2f1-7a93115ef513> <http://www.w3.org/ns/org#classification> <http://data.vlaanderen.be/id/concept/GeregistreerdeOrganisatieClassificatieCode/35833ba2-7371-400b-8df2-2912f66fb153> .
|
||||
}
|
||||
}
|
||||
;
|
||||
INSERT DATA {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
<http://data.lblod.info/id/geregistreerdeOrganisaties/8b2e8749-98a9-450f-b2f1-7a93115ef513> <http://www.w3.org/ns/org#classification> <http://data.vlaanderen.be/id/concept/GeregistreerdeOrganisatieClassificatieCode/3e5c8e30-95a7-47b0-b0a4-210d5bd440a7> .
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
PREFIX besluit: <http://data.vlaanderen.be/ns/besluit#>
|
||||
PREFIX regorg: <http://www.w3.org/ns/regorg#>
|
||||
PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
|
||||
|
||||
DELETE {
|
||||
GRAPH ?g {
|
||||
?organisation skos:prefLabel ?oldLabel;
|
||||
regorg:legalName ?oldName.
|
||||
}
|
||||
} INSERT {
|
||||
GRAPH ?g {
|
||||
?organisation skos:prefLabel ?newName;
|
||||
regorg:legalName ?newName.
|
||||
}
|
||||
} WHERE {
|
||||
GRAPH ?g {
|
||||
?organisation a besluit:Bestuurseenheid;
|
||||
skos:prefLabel ?oldLabel;
|
||||
regorg:legalName ?oldName.
|
||||
}
|
||||
VALUES ?g {
|
||||
<http://mu.semte.ch/graphs/administrative-unit>
|
||||
<http://mu.semte.ch/graphs/shared>
|
||||
}
|
||||
VALUES (?organisation ?newName) {
|
||||
(<http://data.lblod.info/id/bestuurseenheden/99da98a7a0087d3429b084ebfc4eb5d488c593790d4d5af7253982a2e21a6a5f> """Bilzen-Hoeselt""")
|
||||
(<http://data.lblod.info/id/bestuurseenheden/9ae900a5447b7d727ca6496910220d4389aba7f1869923f1bbf9729bdeca28e2> """Bilzen-Hoeselt""")
|
||||
(<http://data.lblod.info/id/bestuurseenheden/05099fa1f6524b8b994d86f61549455d2c00b2a956d5308683ac2d1f810fc729> """Tessenderlo-Ham""")
|
||||
(<http://data.lblod.info/id/bestuurseenheden/42a43591e0db1dca9432f480f0f49f9bd4056c2b131e2fc997497130f5e099d0> """Tessenderlo-Ham""")
|
||||
(<http://data.lblod.info/id/bestuurseenheden/104f32d7fb8d4b8b61b71717301656f136fe046eabaf126fb3325896b5c2d625> """Tongeren-Borgloon""")
|
||||
(<http://data.lblod.info/id/bestuurseenheden/ab684633d605d93dbbe6b9ea40667e2bcf03a0856cafe1825e95b7829ed502a3> """Tongeren-Borgloon""")
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,102 @@
|
||||
PREFIX regorg: <http://www.w3.org/ns/regorg#>
|
||||
|
||||
DELETE {
|
||||
GRAPH ?g {
|
||||
?org regorg:orgStatus ?oldStatus.
|
||||
}
|
||||
} INSERT {
|
||||
GRAPH ?g {
|
||||
?org regorg:orgStatus <http://lblod.data.gift/concepts/d02c4e12bf88d2fdf5123b07f29c9311>.
|
||||
}
|
||||
} WHERE {
|
||||
GRAPH ?g {
|
||||
?org regorg:orgStatus ?oldStatus.
|
||||
}
|
||||
VALUES ?g {
|
||||
<http://mu.semte.ch/graphs/administrative-unit>
|
||||
}
|
||||
VALUES ?org {
|
||||
<http://data.lblod.info/id/bestuurseenheden/e41ffa04f94bb450a79793020e70d55b5fee5033a5280277998608a9d0913117>
|
||||
<http://data.lblod.info/id/bestuurseenheden/7125fcbfb7a08f8c01efbed115cea602db249c04afe9b5a2cc298cc7949cd040>
|
||||
|
||||
<http://data.lblod.info/id/bestuurseenheden/4f0eb4436c88cf831c35f84e7c34ce32f9ee4e99c5139aff62990e5e531aa1e7>
|
||||
<http://data.lblod.info/id/bestuurseenheden/6af55cecaea3621f53bb32417a36ed6e3d41b2aa5b9f6d62ab3d80cc8ec11539>
|
||||
<http://data.lblod.info/id/bestuurseenheden/c362abc58ac4579ff417824ce620962ac57bc344b34fe8f51d21b35ef54da36d>
|
||||
<http://data.lblod.info/id/bestuurseenheden/72bc672ceb6894d8dd31dc2dff2faad2fd93f4b9f5347d556d092516eaa30aa3>
|
||||
<http://data.lblod.info/id/bestuurseenheden/d3c76fd84794dad5e12c9eed6d6332dc5e5c99daf0e4ddd7ceebf13d5d6c0ccd>
|
||||
<http://data.lblod.info/id/bestuurseenheden/bbc23313f4c8585a0c51f15f920d77123356535cd1cad9af38f5707892c7088d>
|
||||
|
||||
<http://data.lblod.info/id/bestuurseenheden/a3bd0845853278f478f90b14436d3efa99e73249a84d462f0ddc2e5b6e37a156>
|
||||
<http://data.lblod.info/id/bestuurseenheden/785e8d5516378c7382ad0e7e356d2301496d810c6cd46d72ccebb455d3ac525e>
|
||||
|
||||
<http://data.lblod.info/id/bestuurseenheden/05441122597e0b20b61a8968ea1247c07f9014aad1f1f0709d0b1234e3dfbc2f>
|
||||
<http://data.lblod.info/id/bestuurseenheden/3834647b5e95ea20f5ffe5a12a09fbd3d7fdf0d187fab385cb7b841422176ad6>
|
||||
|
||||
<http://data.lblod.info/id/bestuurseenheden/0327a51548f73607f8a5ec11b36711a3c96703686ad93a3d632718c135c295db>
|
||||
<http://data.lblod.info/id/bestuurseenheden/e39bc997aa6dd9f240277735efd745b6a0422614d2b36cf01825c86b1b91a9ee>
|
||||
<http://data.lblod.info/id/bestuurseenheden/0a2d980559eb9f3e0820386541274a72692f495204cd6d951ea1907ecc65829b>
|
||||
<http://data.lblod.info/id/bestuurseenheden/144c75e403c5084af57f5c0c86252b8759b56baf9694326abbcb5ea40ab69f1a>
|
||||
|
||||
<http://data.lblod.info/id/bestuurseenheden/00eb231f51bd6b4f5dcc6536b2d09a174ea8583f5bf28b10bc4fc769a07e511d>
|
||||
<http://data.lblod.info/id/bestuurseenheden/c69192b973a3ca11531b9657b3ee20aa6688fa33ea1ef1392310fec751980ab2>
|
||||
<http://data.lblod.info/id/bestuurseenheden/3eb8c9fae32d02359dcd7b22e2a74e67a5b48388df31ad819c27c688fedd10b0>
|
||||
<http://data.lblod.info/id/bestuurseenheden/ba8a253d98ea7d2ab1afc43e5e2cd145a12ccd86b68e71d023e3c13a83d7498f>
|
||||
<http://data.lblod.info/id/bestuurseenheden/76c45d60f05bf8afc8c71859342b69cac6a57ee2b320b900a60afd6ba9b8eb9d>
|
||||
<http://data.lblod.info/id/bestuurseenheden/5d21ccef2f5aa3ccbf3a74c6f25ebe9f0b1ef5a97b87f3d79c86ae9d6d857df8>
|
||||
|
||||
<http://data.lblod.info/id/bestuurseenheden/af8969752f6b28c66b6bc402d7987fa38774901ac72b95c5cb7976570487c3c9>
|
||||
<http://data.lblod.info/id/bestuurseenheden/fb1be873c4b31e391613dfae8e68edd694b1fdf126eeecb502b1e5cad6f2f682>
|
||||
|
||||
<http://data.lblod.info/id/bestuurseenheden/f6b131de5e40a0dfd4fc93fedf3b95c9bf156ece718b87fe00469dea2564b3fb>
|
||||
<http://data.lblod.info/id/bestuurseenheden/3e077115eeb70b649d44e2ebbb218f2cfcac5d84e130c88584f0ec23f7cebbf9>
|
||||
|
||||
<http://data.lblod.info/id/bestuurseenheden/1313d4a58f9ecf52cc7e274e3549a759b35e731973cc9f5e07562e5650f594dd>
|
||||
<http://data.lblod.info/id/bestuurseenheden/7c6b38fa6fc65879cb674a654617de171adfcfacba086fb918da3749dbaa43b5>
|
||||
|
||||
<http://data.lblod.info/id/bestuurseenheden/c5dbb08e35e2d090a05d119fef4cc161b5ee1f322698cb8ea3c8c6643a521cf2>
|
||||
<http://data.lblod.info/id/bestuurseenheden/f2a9a2392d5e4c0f992a84a0871d048a7b91b14681e9980a63aa6ba4b1f7eb8c>
|
||||
|
||||
<http://data.lblod.info/id/bestuurseenheden/c0b6b5cf198cd939251dff8ed052177cfff245074c6b8d43394c8c97f7b6e945>
|
||||
<http://data.lblod.info/id/bestuurseenheden/8ef1e4a43efd913e6b09b0ddea344b7b5d723a344ad559389a55ae1ff0bebc8f>
|
||||
<http://data.lblod.info/id/bestuurseenheden/04895013fe6301f32aa46deae98abfb833a717ece5a33b6c453674c6d0f4cc5e>
|
||||
<http://data.lblod.info/id/bestuurseenheden/f56f068943a99059f5bfc3b905fe8848a25a47cfa30fb3ed3d294b47815b2255>
|
||||
|
||||
<http://data.lblod.info/id/bestuurseenheden/5a4b2b4f1de1f3b91b0348a7eb6d6aa0ef9420b8ec31374970c9ffe933a79515>
|
||||
<http://data.lblod.info/id/bestuurseenheden/3f57a17fbcdfc13def910c54948bec11d71d3f75946b0336fffc0587bf18d783>
|
||||
|
||||
<http://data.lblod.info/id/bestuurseenheden/2564e21e3650f91625189ccb7eb055e47754a0633c54c7582a899171fef60c52>
|
||||
<http://data.lblod.info/id/bestuurseenheden/60daf27c2cf12dd123447aa300dd7320890391dbd8dd6b4dd7ec02258f8281b3>
|
||||
}
|
||||
}
|
||||
;
|
||||
DELETE {
|
||||
GRAPH ?g {
|
||||
?org regorg:orgStatus ?oldStatus.
|
||||
}
|
||||
} INSERT {
|
||||
GRAPH ?g {
|
||||
?org regorg:orgStatus <http://lblod.data.gift/concepts/63cc561de9188d64ba5840a42ae8f0d6>.
|
||||
}
|
||||
} WHERE {
|
||||
GRAPH ?g {
|
||||
?org regorg:orgStatus ?oldStatus.
|
||||
}
|
||||
VALUES ?g {
|
||||
<http://mu.semte.ch/graphs/administrative-unit>
|
||||
}
|
||||
VALUES ?org {
|
||||
<http://data.lblod.info/id/bestuurseenheden/4b44e6f1-113b-4692-b149-44a889b215f2>
|
||||
|
||||
<http://data.lblod.info/id/bestuurseenheden/1ca65d65-54ff-4b44-b750-bd70c91191af>
|
||||
<http://data.lblod.info/id/bestuurseenheden/7d53f659-3a3b-44b1-9e77-3ea067678c0e>
|
||||
|
||||
<http://data.lblod.info/id/bestuurseenheden/b8bb293d-aa22-4b43-bda4-0b6af76e9493>
|
||||
<http://data.lblod.info/id/bestuurseenheden/5d94b2fd-60ee-4e56-a1f0-a586d596adf6>
|
||||
|
||||
<http://data.lblod.info/id/bestuurseenheden/19483103-318e-435a-aa37-45e485406ee9>
|
||||
<http://data.lblod.info/id/bestuurseenheden/fd41f573-7d9a-4d9f-b7d0-d5b6114d1622>
|
||||
|
||||
<http://data.lblod.info/id/bestuurseenheden/add1e4eb-9ec7-4ea6-af82-335aa76b7d48>
|
||||
<http://data.lblod.info/id/bestuurseenheden/650378e7-1bee-4737-91ff-5b20ac4623cf>
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
PREFIX locn: <http://www.w3.org/ns/locn#>
|
||||
PREFIX adres: <https://data.vlaanderen.be/ns/adres#>
|
||||
PREFIX organisatie: <https://data.vlaanderen.be/ns/organisatie#>
|
||||
PREFIX org: <http://www.w3.org/ns/org#>
|
||||
|
||||
DELETE {
|
||||
GRAPH ?g {
|
||||
?address locn:adminUnitL2 "Antwerpen".
|
||||
}
|
||||
} INSERT {
|
||||
GRAPH ?g {
|
||||
?address locn:adminUnitL2 "Oost-Vlaanderen".
|
||||
}
|
||||
} WHERE {
|
||||
GRAPH ?g {
|
||||
?address a locn:Address;
|
||||
adres:gemeentenaam "Zwijndrecht";
|
||||
locn:adminUnitL2 "Antwerpen"
|
||||
FILTER (EXISTS { ?site organisatie:bestaatUit ?address. } ||
|
||||
EXISTS { ?site org:siteAddress/locn:address ?address. })
|
||||
|
||||
}
|
||||
VALUES ?g {
|
||||
<http://mu.semte.ch/graphs/worship-service>
|
||||
<http://mu.semte.ch/graphs/administrative-unit>
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,51 @@
|
||||
PREFIX adres: <https://data.vlaanderen.be/ns/adres#>
|
||||
PREFIX locn: <http://www.w3.org/ns/locn#>
|
||||
PREFIX organisatie: <https://data.vlaanderen.be/ns/organisatie#>
|
||||
PREFIX org: <http://www.w3.org/ns/org#>
|
||||
|
||||
DELETE {
|
||||
GRAPH ?g {
|
||||
?address adres:gemeentenaam ?oldMunicipality.
|
||||
}
|
||||
}
|
||||
INSERT {
|
||||
GRAPH ?g {
|
||||
?address adres:gemeentenaam ?newMunicipality.
|
||||
}
|
||||
}
|
||||
WHERE {
|
||||
GRAPH ?g {
|
||||
?address a locn:Address;
|
||||
adres:gemeentenaam ?oldMunicipality.
|
||||
FILTER (EXISTS { ?site organisatie:bestaatUit ?address. } ||
|
||||
EXISTS { ?site org:siteAddress/locn:address ?address. })
|
||||
}
|
||||
VALUES ?g {
|
||||
<http://mu.semte.ch/graphs/administrative-unit>
|
||||
<http://mu.semte.ch/graphs/worship-service>
|
||||
}
|
||||
VALUES (?oldMunicipality ?newMunicipality) {
|
||||
("Borsbeek" "Antwerpen")
|
||||
("Galmaarden" "Pajottegem")
|
||||
("Gooik" "Pajottegem")
|
||||
("Herne" "Pajottegem")
|
||||
("Ruiselede" "Wingene")
|
||||
("Meulebeke" "Tielt")
|
||||
("De Pinte" "Nazareth-De Pinte")
|
||||
("Nazareth" "Nazareth-De Pinte")
|
||||
("Wachtebeke" "Lochristi")
|
||||
("Moerbeke" "Lokeren")
|
||||
("Melle" "Merelbeke-Melle")
|
||||
("Merelbeke" "Merelbeke-Melle")
|
||||
("Beveren" "Beveren-Kruibeke-Zwijndrecht")
|
||||
("Kruibeke" "Beveren-Kruibeke-Zwijndrecht")
|
||||
("Zwijndrecht" "Beveren-Kruibeke-Zwijndrecht")
|
||||
("Bilzen" "Bilzen-Hoeselt")
|
||||
("Hoeselt" "Bilzen-Hoeselt")
|
||||
("Borgloon" "Tongeren-Borgloon")
|
||||
("Tongeren" "Tongeren-Borgloon")
|
||||
("Ham" "Tessenderlo-Ham")
|
||||
("Tessenderlo" "Tessenderlo-Ham")
|
||||
("Kortessem" "Hasselt")
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,92 @@
|
||||
PREFIX locn: <http://www.w3.org/ns/locn#>
|
||||
PREFIX adres: <https://data.vlaanderen.be/ns/adres#>
|
||||
PREFIX organisatie: <https://data.vlaanderen.be/ns/organisatie#>
|
||||
PREFIX org: <http://www.w3.org/ns/org#>
|
||||
|
||||
DELETE {
|
||||
GRAPH ?g {
|
||||
?address locn:fullAddress ?fullAddress.
|
||||
}
|
||||
} INSERT {
|
||||
GRAPH ?g {
|
||||
?address locn:fullAddress ?newFullAddress.
|
||||
}
|
||||
} WHERE {
|
||||
GRAPH ?g {
|
||||
?address locn:fullAddress ?fullAddress;
|
||||
locn:thoroughfare ?street;
|
||||
adres:Adresvoorstelling.huisnummer ?buildingNo;
|
||||
locn:postCode ?postalCode;
|
||||
adres:gemeentenaam ?municipality;
|
||||
adres:land ?country.
|
||||
FILTER NOT EXISTS { ?address adres:Adresvoorstelling.busnummer ?boxNo. }
|
||||
FILTER (EXISTS { ?site organisatie:bestaatUit ?address. } ||
|
||||
EXISTS { ?site org:siteAddress/locn:address ?address. })
|
||||
FILTER (?municipality IN (
|
||||
"Antwerpen",
|
||||
"Pajottegem",
|
||||
"Wingene",
|
||||
"Tielt",
|
||||
"Nazareth-De Pinte",
|
||||
"Lochristi",
|
||||
"Lokeren",
|
||||
"Merelbeke-Melle",
|
||||
"Beveren-Kruibeke-Zwijndrecht",
|
||||
"Bilzen-Hoeselt",
|
||||
"Tongeren-Borgloon",
|
||||
"Tessenderlo-Ham",
|
||||
"Hasselt"
|
||||
))
|
||||
BIND (CONCAT(?street, " ", ?buildingNo, ", ", ?postalCode, " ", ?municipality, ", ", ?country) AS ?newFullAddress)
|
||||
FILTER (?fullAddress != ?newFullAddress)
|
||||
}
|
||||
|
||||
VALUES ?g {
|
||||
<http://mu.semte.ch/graphs/administrative-unit>
|
||||
<http://mu.semte.ch/graphs/worship-service>
|
||||
}
|
||||
}
|
||||
;
|
||||
DELETE {
|
||||
GRAPH ?g {
|
||||
?address locn:fullAddress ?fullAddress.
|
||||
}
|
||||
} INSERT {
|
||||
GRAPH ?g {
|
||||
?address locn:fullAddress ?newFullAddress.
|
||||
}
|
||||
} WHERE {
|
||||
GRAPH ?g {
|
||||
?address locn:fullAddress ?fullAddress;
|
||||
locn:thoroughfare ?street;
|
||||
adres:Adresvoorstelling.huisnummer ?buildingNo;
|
||||
adres:Adresvoorstelling.busnummer ?boxNo;
|
||||
locn:postCode ?postalCode;
|
||||
adres:gemeentenaam ?municipality;
|
||||
adres:land ?country.
|
||||
FILTER (EXISTS { ?site organisatie:bestaatUit ?address. } ||
|
||||
EXISTS { ?site org:siteAddress/locn:address ?address. })
|
||||
FILTER (?municipality IN (
|
||||
"Antwerpen",
|
||||
"Pajottegem",
|
||||
"Wingene",
|
||||
"Tielt",
|
||||
"Nazareth-De Pinte",
|
||||
"Lochristi",
|
||||
"Lokeren",
|
||||
"Merelbeke-Melle",
|
||||
"Beveren-Kruibeke-Zwijndrecht",
|
||||
"Bilzen-Hoeselt",
|
||||
"Tongeren-Borgloon",
|
||||
"Tessenderlo-Ham",
|
||||
"Hasselt"
|
||||
))
|
||||
BIND (CONCAT(?street, " ", ?buildingNo, " ", ?boxNo, ", ", ?postalCode, " ", ?municipality, ", ", ?country) AS ?newFullAddress)
|
||||
FILTER (?fullAddress != ?newFullAddress)
|
||||
}
|
||||
|
||||
VALUES ?g {
|
||||
<http://mu.semte.ch/graphs/administrative-unit>
|
||||
<http://mu.semte.ch/graphs/worship-service>
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
PREFIX regorg: <http://www.w3.org/ns/regorg#>
|
||||
|
||||
DELETE {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?s regorg:orgStatus ?activeStatus.
|
||||
}
|
||||
} INSERT {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?s regorg:orgStatus ?notActiveStatus.
|
||||
}
|
||||
} WHERE {
|
||||
VALUES ?s {
|
||||
<http://data.lblod.info/id/bestuurseenheden/150440a8bb763d6f53d24ca1c6f1460cb5817c8a261fd90e74aadac3292c3efe>
|
||||
<http://data.lblod.info/id/bestuurseenheden/41d31a2eb697af977aadf64c73e0bcffb094e0f20e4017fe3b49c507079c0976>
|
||||
|
||||
<http://data.lblod.info/id/bestuurseenheden/330516b323c00851cf4b93e6d5d7a2ef4591f68ae6e71ad9c1f432ee70521bb2>
|
||||
<http://data.lblod.info/id/bestuurseenheden/7dd1250996188607bb1e28df1ebea0b943e8db59c08ea01e3c57672531c43ec6>
|
||||
<http://data.lblod.info/id/bestuurseenheden/541c1603eb8c01968f95d1f262854134499e00d135cd7c9147d307ccbd1e20fd>
|
||||
|
||||
<http://data.lblod.info/id/bestuurseenheden/4deae42b2b25bff407f5abc7cbb6d62eb02afaf2892086341c324fdf2c0e6e92>
|
||||
<http://data.lblod.info/id/bestuurseenheden/b7af3483cb5d0021c6f5864a433b211fce30246ef685621d104b1951915c21c4>
|
||||
}
|
||||
BIND (<http://lblod.data.gift/concepts/d02c4e12bf88d2fdf5123b07f29c9311> AS ?notActiveStatus)
|
||||
BIND (<http://lblod.data.gift/concepts/63cc561de9188d64ba5840a42ae8f0d6> AS ?activeStatus)
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
PREFIX regorg: <http://www.w3.org/ns/regorg#>
|
||||
PREFIX org: <http://www.w3.org/ns/org#>
|
||||
|
||||
DELETE {
|
||||
GRAPH <http://mu.semte.ch/graphs/worship-service> {
|
||||
?stAmandus regorg:orgStatus ?oldStatus.
|
||||
}
|
||||
} INSERT {
|
||||
GRAPH <http://mu.semte.ch/graphs/worship-service> {
|
||||
?stAmandus regorg:orgStatus ?notActiveStatus.
|
||||
|
||||
?mergerChangeEvent org:originalOrganization ?stAmandus.
|
||||
}
|
||||
} WHERE {
|
||||
GRAPH <http://mu.semte.ch/graphs/worship-service> {
|
||||
?stAmandus regorg:orgStatus ?oldStatus.
|
||||
}
|
||||
VALUES ?stAmandus {
|
||||
<http://data.lblod.info/id/besturenVanDeEredienst/b18a5d3943087d509d76dcceeba102c3>
|
||||
}
|
||||
BIND (<http://data.lblod.info/id/veranderingsgebeurtenissen/677E445E29299CC832892A0F> AS ?mergerChangeEvent)
|
||||
BIND (<http://lblod.data.gift/concepts/d02c4e12bf88d2fdf5123b07f29c9311> AS ?notActiveStatus)
|
||||
}
|
||||
@@ -14,7 +14,7 @@ PREFIX adres: <https://data.vlaanderen.be/ns/adres#>
|
||||
PREFIX generiek: <https://data.vlaanderen.be/ns/generiek#>
|
||||
PREFIX mandaat: <http://data.vlaanderen.be/ns/mandaat#>
|
||||
PREFIX besluit: <http://data.vlaanderen.be/ns/besluit#>
|
||||
PREFIX lblodlg: <https://data.lblod.info/vocabularies/leidinggevenden/>
|
||||
PREFIX lblodlg: <http://data.lblod.info/vocabularies/leidinggevenden/>
|
||||
PREFIX dc_terms: <http://purl.org/dc/terms/>
|
||||
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
|
||||
PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user