Compare commits
529 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
93298b2c34 | ||
|
|
0dae17db17 | ||
|
|
be4d2c04b0 | ||
|
|
68afdad2c4 | ||
|
|
c6345a9c2f | ||
|
|
c3365c7b80 | ||
|
|
59b0e6ae5c | ||
|
|
50728e0766 | ||
|
|
88f49a1f08 | ||
|
|
395707593d | ||
|
|
853b2ddd85 | ||
|
|
ee8dbbe72d | ||
|
|
9a71662b49 | ||
|
|
c72093ad4b | ||
|
|
6adf03a6a2 | ||
|
|
0b62fca662 | ||
|
|
ea85a77865 | ||
|
|
b45480d594 | ||
|
|
642125be9b | ||
|
|
6a6d04ecb6 | ||
|
|
70d3174847 | ||
|
|
1e2d32b3c9 | ||
|
|
764638431f | ||
|
|
6a231f3ee2 | ||
|
|
20f010bd42 | ||
|
|
7bb08363e2 | ||
|
|
b66278aec5 | ||
|
|
828d90747e | ||
|
|
b273a77923 | ||
|
|
f689f90e37 | ||
|
|
20bc051103 | ||
|
|
8f57a160e0 | ||
|
|
6f731813bb | ||
|
|
03635e4b12 | ||
|
|
741a7cae2c | ||
|
|
f7c86a177f | ||
|
|
9ea9d90751 | ||
|
|
88fba9c90c | ||
|
|
af74dc7b7b | ||
|
|
d58d200341 | ||
|
|
6b7bb2ec5d | ||
|
|
565cf992c2 | ||
|
|
d8114bec4e | ||
|
|
a352683c6f | ||
|
|
d601d7f34e | ||
|
|
94662e4e04 | ||
|
|
aab976bcc1 | ||
|
|
404a282a7d | ||
|
|
f79724132a | ||
|
|
0b8530db34 | ||
|
|
17d48100d7 | ||
|
|
c6baf82dff | ||
|
|
cde5b49654 | ||
|
|
ef98cd512a | ||
|
|
25eb28c6c5 | ||
|
|
eb55bc9def | ||
|
|
730e531387 | ||
|
|
1edc4cf0a6 | ||
|
|
3a375a4581 | ||
|
|
2666301048 | ||
|
|
7019d06b62 | ||
|
|
3cd6c2c7f7 | ||
|
|
8e311c6bab | ||
|
|
b296a99ac0 | ||
|
|
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 | ||
|
|
c5974f34d3 | ||
|
|
d70becf88f | ||
|
|
71b8b636c2 | ||
|
|
74096c96b1 | ||
|
|
5ea8bfc46b | ||
|
|
1698112a9d | ||
|
|
a001f6b9e4 | ||
|
|
dba1ada5e2 | ||
|
|
a6571eefa5 | ||
|
|
347844e341 | ||
|
|
aaf87ee32f | ||
|
|
631ba827ee | ||
|
|
19e3423202 | ||
|
|
8750fddb2d | ||
|
|
8a7eb8ede0 | ||
|
|
5438af149b | ||
|
|
4ff40cb4e4 | ||
|
|
d53bd27369 | ||
|
|
90fa373254 | ||
|
|
e0a9e77441 | ||
|
|
d290187467 | ||
|
|
dd08a03faa | ||
|
|
79bae4fd3c | ||
|
|
6bf50bbbb7 | ||
|
|
038b72646c | ||
|
|
cfd1a445de | ||
|
|
c570ab994e | ||
|
|
c9ba00fc23 | ||
|
|
c993a681d9 | ||
|
|
fc676dd30f | ||
|
|
54700d9832 | ||
|
|
51e41f1eb1 | ||
|
|
ce0e267627 | ||
|
|
090a69fd3f | ||
|
|
d0835a1b30 | ||
|
|
44e2de4f0b | ||
|
|
824201ced6 | ||
|
|
80ad432a5c | ||
|
|
9122c18f1e | ||
|
|
b60004fcf2 | ||
|
|
945faf8761 | ||
|
|
1f7a754eb9 | ||
|
|
93a86372e0 | ||
|
|
fd5844c319 | ||
|
|
dc62d6616b | ||
|
|
8143aac736 | ||
|
|
dde2e42696 | ||
|
|
0f1654e64c | ||
|
|
9ed42aa4f6 | ||
|
|
4e39d1eed4 | ||
|
|
ccc06b1970 | ||
|
|
885db51540 | ||
|
|
477c37320d | ||
|
|
dfec837bba | ||
|
|
806a870744 | ||
|
|
432d866b7b | ||
|
|
04f01f8302 | ||
|
|
8e4c395a78 | ||
|
|
eb552c92c3 | ||
|
|
01a374f98f | ||
|
|
782940c270 | ||
|
|
34ec459382 | ||
|
|
7afee31178 | ||
|
|
b9db4d3c92 | ||
|
|
1b2f9d45ac | ||
|
|
925289a9dc | ||
|
|
1518c71334 | ||
|
|
adb54c3b5a | ||
|
|
2f37aaaefc | ||
|
|
c52ff23566 | ||
|
|
7964fd7879 | ||
|
|
86c2917396 | ||
|
|
d66b0b5eec | ||
|
|
6222aadf35 | ||
|
|
ca92809cf5 | ||
|
|
90f2cc26c5 | ||
|
|
fd98afc05b | ||
|
|
4f8babb9ae | ||
|
|
df4c187c2a | ||
|
|
644fbfaae3 | ||
|
|
9d5d11f922 | ||
|
|
08aae7881d | ||
|
|
13c862f689 | ||
|
|
1031b78ac7 | ||
|
|
03ad3c2089 | ||
|
|
f79d31e153 | ||
|
|
023114fcab | ||
|
|
ac0f5764df | ||
|
|
dc9d060d49 | ||
|
|
3eceefce12 | ||
|
|
f026723aee | ||
|
|
43b5f5e7eb | ||
|
|
41a497dc71 | ||
|
|
2423b02840 | ||
|
|
39226cdf24 | ||
|
|
9b3dd7201b | ||
|
|
5d20fee494 | ||
|
|
4e30c155ef | ||
|
|
0b18c44e2b | ||
|
|
7294052c75 | ||
|
|
ccac93121b | ||
|
|
58742fdf5e | ||
|
|
12efbcc9fd | ||
|
|
0426f0f35e | ||
|
|
4ea35853f1 | ||
|
|
04b25fea7d | ||
|
|
04298db9e5 | ||
|
|
799999f051 | ||
|
|
8f8557d733 | ||
|
|
ae5c84d1d4 | ||
|
|
fc6b2d3b80 | ||
|
|
99f5c9fc91 | ||
|
|
d40b2837b9 | ||
|
|
3870dac1f8 | ||
|
|
08b0e29f20 | ||
|
|
7926b078e3 | ||
|
|
76d7964e5c | ||
|
|
bc10af81f4 | ||
|
|
eddf8f8b67 | ||
|
|
14a290b82f | ||
|
|
ba4a4aa5da | ||
|
|
00a6144c16 | ||
|
|
b1cc9c7329 | ||
|
|
25588d13ac | ||
|
|
98ed3260ed | ||
|
|
5e0d47053d | ||
|
|
d687463c0d | ||
|
|
74442fcdf6 | ||
|
|
40d7c72b59 | ||
|
|
44cbb222cc | ||
|
|
08b39e36c3 | ||
|
|
95953c7988 | ||
|
|
99dd506f8f | ||
|
|
b9695eb255 | ||
|
|
4389a743b6 | ||
|
|
e40d85b22c | ||
|
|
340937bc85 | ||
|
|
f08e2e3df0 | ||
|
|
77245adbaa | ||
|
|
cb0191f28b | ||
|
|
3f460ce329 | ||
|
|
6397ce2923 | ||
|
|
7e0a668573 | ||
|
|
64f78722d9 | ||
|
|
2ed45e3a5e | ||
|
|
70e09cf995 | ||
|
|
e3ec21eb71 | ||
|
|
7da8ebb695 | ||
|
|
494caa8c59 | ||
|
|
13d8154a9a | ||
|
|
b6dd8b4519 | ||
|
|
797d3a8d44 | ||
|
|
6cc953e4ed | ||
|
|
a98f860d3c | ||
|
|
162a6ff654 | ||
|
|
d3b40b88ea | ||
|
|
a7d6dcfb32 | ||
|
|
d4f9352c61 | ||
|
|
e182017bb0 | ||
|
|
67efdf47aa | ||
|
|
fcf5d3fc59 | ||
|
|
15248b5e4b | ||
|
|
0ba4a6f393 | ||
|
|
2e6dd74b72 | ||
|
|
1412a767ad | ||
|
|
e755d615fc | ||
|
|
974a966576 | ||
|
|
78ce1f7071 | ||
|
|
a647c7ea69 | ||
|
|
8c1538d45e | ||
|
|
8c7e75acc8 | ||
|
|
9291024baa | ||
|
|
d202be0be8 | ||
|
|
ee1d6078ab | ||
|
|
fd6326c605 | ||
|
|
0502535e13 | ||
|
|
d617154e5d | ||
|
|
68677ead2a | ||
|
|
3102f48998 | ||
|
|
d5da714e12 | ||
|
|
c373a3708b | ||
|
|
7ae1793866 | ||
|
|
48cefe143e | ||
|
|
0e5ac9a59f | ||
|
|
296f18e41c | ||
|
|
51dce798bc | ||
|
|
63979c19ab | ||
|
|
5da229f198 | ||
|
|
da5c9fb35b | ||
|
|
53f8de39eb | ||
|
|
d570e94f22 | ||
|
|
c9af936b43 | ||
|
|
b9348a5076 | ||
|
|
429072dd18 | ||
|
|
fdd83c93bb | ||
|
|
e0d945f960 | ||
|
|
90cc3a0888 | ||
|
|
2478d1dc06 | ||
|
|
543ce252f8 | ||
|
|
86c8fd4b56 | ||
|
|
7050629e0c | ||
|
|
4b0f0c1df2 | ||
|
|
9b4b9a0a6d | ||
|
|
7902a1acad | ||
|
|
fef667fd9f | ||
|
|
c7e58abdc3 | ||
|
|
2c6d73d389 | ||
|
|
07b36fb193 | ||
|
|
633a44a85f | ||
|
|
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 | ||
|
|
b9e8d72f01 | ||
|
|
1b2268fc6a | ||
|
|
4e0a9170d9 | ||
|
|
3cc305982a | ||
|
|
d10465b73f | ||
|
|
36670ebfa4 | ||
|
|
1289f1d78a | ||
|
|
ead102d8c6 | ||
|
|
b7279d2640 | ||
|
|
e70c112f20 | ||
|
|
607844ae33 | ||
|
|
f518646c06 | ||
|
|
12d3ae6d10 | ||
|
|
4dc4bf84fa | ||
|
|
60ba1df934 | ||
|
|
1fc6a43e9c | ||
|
|
c5888b8f8d | ||
|
|
a8274a8925 | ||
|
|
cefdd9aaea | ||
|
|
108e29e4a1 | ||
|
|
52bb3b8d6b | ||
|
|
24e9659c3d | ||
|
|
b676c0a743 | ||
|
|
764cfb6f1c | ||
|
|
3bef65188c | ||
|
|
e414a9e086 | ||
|
|
8b001b93c8 | ||
|
|
97c1929346 | ||
|
|
a53f0d3f30 | ||
|
|
76784840a4 | ||
|
|
6fae30d245 | ||
|
|
11105113a9 | ||
|
|
0e85e069b1 | ||
|
|
e8061f6a0b | ||
|
|
65efd72683 | ||
|
|
70e79734df | ||
|
|
329e87f0eb | ||
|
|
663c975725 | ||
|
|
54e381bfad |
8
.gitignore
vendored
8
.gitignore
vendored
@@ -19,6 +19,8 @@ docker-compose.override.yml
|
||||
.env
|
||||
|
||||
/config/migrations/private-data/*
|
||||
/config/migrations/local/*
|
||||
/config/migrations-triggering-indexing/local/*
|
||||
|
||||
/config/proxy/nginx.htpasswd
|
||||
|
||||
@@ -28,9 +30,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
|
||||
|
||||
316
CHANGELOG.md
Normal file
316
CHANGELOG.md
Normal file
@@ -0,0 +1,316 @@
|
||||
# Changelog
|
||||
## Unreleased
|
||||
|
||||
## v1.30.5 (2025-03-10)
|
||||
### Backend
|
||||
- Added `http://www.w3.org/ns/prov#Location` to delta stream 'public' [DL-6496]
|
||||
### Deploy notes
|
||||
```
|
||||
drc restart delta-producer-publication-graph-maintainer
|
||||
drc exec delta-producer-background-jobs-initiator curl -X POST http://localhost/public/healing-jobs
|
||||
|
||||
```
|
||||
|
||||
## v1.30.4 (2025-03-06)
|
||||
### Backend
|
||||
- Add missing codes to public producer [DL-6210] [DL-6449]
|
||||
#### Deploy commands
|
||||
```
|
||||
drc restart migrations delta-producer-publication-graph-maintainer
|
||||
drc exec delta-producer-background-jobs-initiator curl -X POST http://localhost/public/healing-jobs
|
||||
```
|
||||
|
||||
## v1.30.3 (2025-03-04)
|
||||
### Frontend
|
||||
- Bump to [v1.29.1](https://github.com/lblod/frontend-organization-portal/releases/tag/v1.29.1)
|
||||
### Deploy notes
|
||||
- Bump frontend
|
||||
#### Deploy commands
|
||||
```
|
||||
drc pull frontend; drc up -d frontend
|
||||
```
|
||||
|
||||
## v1.30.2 (2025-02-28)
|
||||
### Backend
|
||||
- Datafix: add new timed governing bodies for new legislature for AGBs [OP-3552]
|
||||
### Deploy notes
|
||||
- Restart the migration service
|
||||
- Start a healing job the public producer, or wait for it to kick in overnight
|
||||
#### Deploy commands
|
||||
```
|
||||
drc restart migrations; drc logs -ft --tail=200 migrations
|
||||
drc exec delta-producer-background-jobs-initiator curl -X POST http://localhost/public/healing-jobs
|
||||
```
|
||||
|
||||
## v1.30.1 (2025-02-20)
|
||||
### Backend
|
||||
- Bestuursorgaanclassificatiecode of VGC was in wrong graph, so it wouldn't export. [DL-6428]
|
||||
### Deploy notes
|
||||
```
|
||||
drc restart migrations
|
||||
```
|
||||
|
||||
## v1.30.0 (2025-02-19)
|
||||
### Frontend
|
||||
- Bump to version [v1.29.0](https://github.com/lblod/frontend-organization-portal/releases/tag/v1.29.0)
|
||||
### Backend
|
||||
- Datafix: delete duplicate identifiers [OP-3157]
|
||||
- Feature: replace different relations between organisations by memberships [OP-3195 (epic), OP-2606, OP-3156, OP-3198, OP-3199, OP-3258, OP-3259, OP-3260, OP-3265, OP-3293, OP-3305]
|
||||
- Added `db-cleanup-service` to keep membership data backwards compatible [OP-3369]
|
||||
- Datafix: delete incorrect change event [OP-3363]
|
||||
- Feature: re-enable contact data editing [OP-3425]
|
||||
- Remove gemeente and provincie classifications from admin unit graph [OP-3393]
|
||||
- Remove several OCMW bcsd faciliteitgemeenten [OP-3535]
|
||||
- Completely remove AGB Stekene's data. [OP-3409]
|
||||
- Remove reasoner service, replaced by new consumer logic
|
||||
|
||||
### Deploy Notes
|
||||
- Before pulling the changes
|
||||
+ Shut down the reasoner and thank it for its good service: `drc down reasoner`
|
||||
- Re-enable contact date editing:
|
||||
+ remove `EMBER_ENABLE_EDIT_CONTACT_DATA_FEATURE` flag in `docker-compose.override.yml`
|
||||
+ Stop and remove the `clb-contact-data-consumer` service
|
||||
+ Remove the `clb-contact-data-consumer` configuration in `docker-compose.override.yml`
|
||||
- Rebuild the `search` service before starting the re-indexing
|
||||
- To enable the membership functionality:
|
||||
+ Restart migration service
|
||||
+ Restart services for which the configuration was changed: `resource`, `dispatcher` and `db`
|
||||
+ Start the `db-cleanup` service
|
||||
+ Pull and restart the frontend
|
||||
+ Perform a re-index using `reset-elastic.sh` script
|
||||
#### Deploy commands
|
||||
```
|
||||
drc down clb-contact-data-consumer
|
||||
drc up -d search
|
||||
drc restart migrations; drc logs -ft --tail=200 migrations
|
||||
drc restart migrations-triggering-indexing && drc logs -ft --tail=200 migrations-triggering-indexing
|
||||
drc restart resource dispatcher db
|
||||
drc up -d db-cleanup
|
||||
drc pull frontend; drc up -d frontend
|
||||
./scripts/reset-elastic.sh
|
||||
```
|
||||
|
||||
## 1.29.2 (2025-02-17)
|
||||
### Data fix
|
||||
- restore betrokken 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
|
||||
|
||||
@@ -40,6 +40,7 @@ defmodule Acl.UserGroups.Config do
|
||||
"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",
|
||||
@@ -76,7 +77,10 @@ defmodule Acl.UserGroups.Config do
|
||||
"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://data.lblod.info/vocabularies/contacthub/AgentInPositie",
|
||||
"http://mu.semte.ch/vocabularies/ext/KboOrganisatie",
|
||||
"http://www.w3.org/ns/org#Membership",
|
||||
"http://www.w3.org/2006/time#ProperInterval"
|
||||
]
|
||||
|
||||
@shared_protected_type [
|
||||
|
||||
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,7 +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://triplestore:8890/sparql",
|
||||
"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
|
||||
@@ -12,7 +12,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://triplestore:8890/sparql",
|
||||
"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
|
||||
@@ -39,7 +39,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://triplestore:8890/sparql",
|
||||
"publicationGraphEndpoint": "http://publication-triplestore:8890/sparql",
|
||||
"targetDcatGraph": "http://mu.semte.ch/graphs/public",
|
||||
"targetFilesGraph": "http://mu.semte.ch/graphs/public",
|
||||
"cleanupOldDumps": true
|
||||
@@ -48,7 +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://triplestore:8890/sparql",
|
||||
"publicationGraphEndpoint": "http://publication-triplestore:8890/sparql",
|
||||
"targetDcatGraph": "http://mu.semte.ch/graphs/public",
|
||||
"targetFilesGraph": "http://mu.semte.ch/graphs/public",
|
||||
"cleanupOldDumps": true
|
||||
@@ -57,7 +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://triplestore:8890/sparql",
|
||||
"publicationGraphEndpoint": "http://publication-triplestore:8890/sparql",
|
||||
"targetDcatGraph": "http://mu.semte.ch/graphs/public",
|
||||
"targetFilesGraph": "http://mu.semte.ch/graphs/public",
|
||||
"cleanupOldDumps": true
|
||||
@@ -66,7 +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://triplestore:8890/sparql",
|
||||
"publicationGraphEndpoint": "http://publication-triplestore:8890/sparql",
|
||||
"targetDcatGraph": "http://mu.semte.ch/graphs/public",
|
||||
"targetFilesGraph": "http://mu.semte.ch/graphs/public",
|
||||
"cleanupOldDumps": true
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
{
|
||||
"conceptScheme": "http://lblod.data.gift/concept-schemes/0d101f02-609d-4cde-bb07-639d874470c4",
|
||||
"export": [
|
||||
|
||||
{
|
||||
"type": "http://data.lblod.info/vocabularies/erediensten/BestuurVanDeEredienst",
|
||||
"strictTypeExport": "true",
|
||||
@@ -13,10 +12,9 @@
|
||||
"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#hasPrimarySite",
|
||||
"http://www.w3.org/ns/org#hasSite",
|
||||
"http://www.w3.org/ns/org#changedBy",
|
||||
"http://www.w3.org/ns/org#resultedFrom",
|
||||
"http://www.w3.org/ns/org#hasPost",
|
||||
@@ -40,10 +38,9 @@
|
||||
"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#hasPrimarySite",
|
||||
"http://www.w3.org/ns/org#hasSite",
|
||||
"http://www.w3.org/ns/org#changedBy",
|
||||
"http://www.w3.org/ns/org#resultedFrom",
|
||||
"http://www.w3.org/ns/org#hasPost",
|
||||
@@ -72,13 +69,12 @@
|
||||
"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#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",
|
||||
@@ -98,7 +94,38 @@
|
||||
"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/adms#identifier"
|
||||
"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"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -126,59 +153,6 @@
|
||||
"http://data.lblod.info/vocabularies/erediensten/functie"
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "http://www.w3.org/ns/org#Site",
|
||||
"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#siteAddress",
|
||||
"https://data.vlaanderen.be/ns/organisatie#bestaatUit",
|
||||
"http://data.lblod.info/vocabularies/erediensten/vestigingstype"
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "http://www.w3.org/ns/locn#Address",
|
||||
"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/adres#Adresvoorstelling.huisnummer",
|
||||
"https://data.vlaanderen.be/ns/adres#Adresvoorstelling.busnummer",
|
||||
"http://www.w3.org/ns/locn#thoroughfare",
|
||||
"http://www.w3.org/ns/locn#postCode",
|
||||
"https://data.vlaanderen.be/ns/adres#gemeentenaam",
|
||||
"http://www.w3.org/ns/locn#adminUnitL2",
|
||||
"https://data.vlaanderen.be/ns/adres#land",
|
||||
"http://www.w3.org/ns/locn#fullAddress",
|
||||
"https://data.vlaanderen.be/ns/adres#verwijstNaar",
|
||||
"http://purl.org/dc/terms/source"
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "http://schema.org/ContactPoint",
|
||||
"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/locn#address",
|
||||
"http://xmlns.com/foaf/0.1/page",
|
||||
"http://schema.org/faxNumber",
|
||||
"http://schema.org/contactType",
|
||||
"http://xmlns.com/foaf/0.1/page",
|
||||
"http://schema.org/email",
|
||||
"http://schema.org/telephone"
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "http://www.w3.org/ns/adms#Identifier",
|
||||
"graphsFilter": [
|
||||
@@ -194,9 +168,7 @@
|
||||
},
|
||||
{
|
||||
"type": "http://www.w3.org/ns/adms#Identifier",
|
||||
"graphsFilter": [
|
||||
"http://mu.semte.ch/graphs/worship-service"
|
||||
],
|
||||
"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",
|
||||
@@ -218,9 +190,7 @@
|
||||
},
|
||||
{
|
||||
"type": "https://data.vlaanderen.be/ns/generiek#GestructureerdeIdentificator",
|
||||
"graphsFilter": [
|
||||
"http://mu.semte.ch/graphs/worship-service"
|
||||
],
|
||||
"graphsFilter": ["http://mu.semte.ch/graphs/worship-service"],
|
||||
"properties": [
|
||||
"http://mu.semte.ch/vocabularies/core/uuid",
|
||||
"https://data.vlaanderen.be/ns/generiek#lokaleIdentificator"
|
||||
@@ -229,6 +199,14 @@
|
||||
},
|
||||
{
|
||||
"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"
|
||||
],
|
||||
@@ -256,9 +234,7 @@
|
||||
},
|
||||
{
|
||||
"type": "http://lblod.data.gift/vocabularies/organisatie/TypeEredienst",
|
||||
"graphsFilter": [
|
||||
"http://mu.semte.ch/graphs/public"
|
||||
],
|
||||
"graphsFilter": ["http://mu.semte.ch/graphs/public"],
|
||||
"properties": [
|
||||
"http://mu.semte.ch/vocabularies/core/uuid",
|
||||
"http://www.w3.org/2004/02/skos/core#prefLabel"
|
||||
@@ -266,9 +242,7 @@
|
||||
},
|
||||
{
|
||||
"type": "http://lblod.data.gift/vocabularies/organisatie/BestuursorgaanClassificatieCode",
|
||||
"graphsFilter": [
|
||||
"http://mu.semte.ch/graphs/public"
|
||||
],
|
||||
"graphsFilter": ["http://mu.semte.ch/graphs/public"],
|
||||
"properties": [
|
||||
"http://mu.semte.ch/vocabularies/core/uuid",
|
||||
"http://www.w3.org/2004/02/skos/core#prefLabel"
|
||||
@@ -296,9 +270,7 @@
|
||||
},
|
||||
{
|
||||
"type": "http://lblod.data.gift/vocabularies/organisatie/Veranderingsgebeurtenis",
|
||||
"graphsFilter": [
|
||||
"http://mu.semte.ch/graphs/public"
|
||||
],
|
||||
"graphsFilter": ["http://mu.semte.ch/graphs/public"],
|
||||
"properties": [
|
||||
"http://mu.semte.ch/vocabularies/core/uuid",
|
||||
"http://www.w3.org/2004/02/skos/core#prefLabel"
|
||||
@@ -306,9 +278,7 @@
|
||||
},
|
||||
{
|
||||
"type": "http://lblod.data.gift/vocabularies/organisatie/OrganisatieStatusCode",
|
||||
"graphsFilter": [
|
||||
"http://mu.semte.ch/graphs/public"
|
||||
],
|
||||
"graphsFilter": ["http://mu.semte.ch/graphs/public"],
|
||||
"properties": [
|
||||
"http://mu.semte.ch/vocabularies/core/uuid",
|
||||
"http://www.w3.org/2004/02/skos/core#prefLabel"
|
||||
@@ -316,9 +286,7 @@
|
||||
},
|
||||
{
|
||||
"type": "http://lblod.data.gift/vocabularies/organisatie/TypeVestiging",
|
||||
"graphsFilter": [
|
||||
"http://mu.semte.ch/graphs/public"
|
||||
],
|
||||
"graphsFilter": ["http://mu.semte.ch/graphs/public"],
|
||||
"properties": [
|
||||
"http://mu.semte.ch/vocabularies/core/uuid",
|
||||
"http://www.w3.org/2004/02/skos/core#prefLabel"
|
||||
@@ -351,12 +319,8 @@
|
||||
},
|
||||
{
|
||||
"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"
|
||||
],
|
||||
"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",
|
||||
|
||||
@@ -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": [
|
||||
|
||||
@@ -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,86 @@
|
||||
"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"
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "http://lblod.data.gift/vocabularies/organisatie/MandatarisStatusCode",
|
||||
"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"
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "http://lblod.data.gift/vocabularies/organisatie/BestuursfunctieCode",
|
||||
"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"
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "http://data.lblod.info/vocabularies/leidinggevenden/FunctionarisStatusCode",
|
||||
"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"
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "http://mu.semte.ch/vocabularies/ext/OrganizationClassificationCode",
|
||||
"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"
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "http://www.w3.org/ns/prov#Location",
|
||||
"graphsFilter": [
|
||||
"http://mu.semte.ch/graphs/shared",
|
||||
"http://mu.semte.ch/graphs/administrative-unit"
|
||||
],
|
||||
"hasRegexGraphsFilter": false,
|
||||
"properties": [
|
||||
"http://www.w3.org/2000/01/rdf-schema#label",
|
||||
"http://mu.semte.ch/vocabularies/core/uuid",
|
||||
"http://mu.semte.ch/vocabularies/ext/werkingsgebiedNiveau",
|
||||
"http://www.opengis.net/ont/geosparql#sfWithin",
|
||||
"http://www.w3.org/2004/02/skos/core#exactMatch"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -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,59 +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: {
|
||||
},
|
||||
callback: {
|
||||
url: 'http://delta-producer-pub-graph-maintainer-organizations-public-info/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: {
|
||||
},
|
||||
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: {
|
||||
// anything
|
||||
},
|
||||
callback: {
|
||||
url: 'http://delta-producer-pub-graph-maintainer-worship-posts/delta',
|
||||
url: 'http://delta-producer-publication-graph-maintainer/delta',
|
||||
method: 'POST'
|
||||
},
|
||||
options: {
|
||||
|
||||
@@ -0,0 +1,31 @@
|
||||
PREFIX org: <http://www.w3.org/ns/org#>
|
||||
|
||||
DELETE {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?membership ?p ?o .
|
||||
}
|
||||
} WHERE {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?membership a org:Membership ;
|
||||
org:member ?member ;
|
||||
org:organization ?organization ;
|
||||
org:role <http://data.lblod.info/id/rollen/4ec7d5c39bdc4e84b4174379b9e22ad8> ; # has a relation with
|
||||
?p ?o .
|
||||
|
||||
?organization org:classification ?organizationClass .
|
||||
FILTER (?organizationClass IN
|
||||
(
|
||||
<http://data.vlaanderen.be/id/concept/BestuurseenheidClassificatieCode/ea446861-2c51-45fa-afd3-4e4a37b71562> , # HVZ
|
||||
<http://data.vlaanderen.be/id/concept/BestuurseenheidClassificatieCode/80310756-ce0a-4a1b-9b8e-7c01b6cc7a2d> , # APB
|
||||
<http://data.vlaanderen.be/id/concept/BestuurseenheidClassificatieCode/d01bb1f6-2439-4e33-9c25-1fc295de2e71> , # Dienstverlenende vereniging
|
||||
<http://data.vlaanderen.be/id/concept/BestuurseenheidClassificatieCode/cd93f147-3ece-4308-acab-5c5ada3ec63d> , # Opdrachthoudende vereniging
|
||||
<http://data.vlaanderen.be/id/concept/BestuurseenheidClassificatieCode/4b8450cf-a326-4c66-9e63-b4ec10acc7f6> , # Opdrachthoudende vereniging met private deelname
|
||||
<http://data.vlaanderen.be/id/concept/BestuurseenheidClassificatieCode/b156b67f-c5f4-4584-9b30-4c090be02fdc> , # Projectvereniging
|
||||
<http://data.vlaanderen.be/id/concept/BestuurseenheidClassificatieCode/a3922c6d-425b-474f-9a02-ffb71a436bfc> , # Politiezone
|
||||
<http://data.vlaanderen.be/id/concept/BestuurseenheidClassificatieCode/34b5af85-dc9f-468f-9e03-ef89b174c267> , # Autonome verzorgingsinstelling
|
||||
<http://data.vlaanderen.be/id/concept/BestuurseenheidClassificatieCode/36a82ba0-7ff1-4697-a9dd-2e94df73b721> , # AGB
|
||||
<http://data.vlaanderen.be/id/concept/BestuurseenheidClassificatieCode/e8294b73-87c9-4fa2-9441-1937350763c9> # Welzijnsvereniging
|
||||
)
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -1,352 +1,387 @@
|
||||
defmodule Dispatcher do
|
||||
use Matcher
|
||||
|
||||
define_accept_types [
|
||||
define_accept_types(
|
||||
html: ["text/html", "application/xhtml+html"],
|
||||
json: ["application/json", "application/vnd.api+json"],
|
||||
upload: ["multipart/form-data"],
|
||||
sparql_json: ["application/sparql-results+json"],
|
||||
any: [ "*/*" ],
|
||||
]
|
||||
|
||||
define_layers [ :api_services, :api, :frontend, :not_found ]
|
||||
any: ["*/*"]
|
||||
)
|
||||
|
||||
define_layers([:api_services, :api, :frontend, :not_found])
|
||||
|
||||
###############################################################
|
||||
# domain.json
|
||||
###############################################################
|
||||
|
||||
match "/people/*path", %{ accept: [:json], layer: :api} do
|
||||
Proxy.forward conn, path, "http://cache/people/"
|
||||
match "/people/*path", %{accept: [:json], layer: :api} do
|
||||
Proxy.forward(conn, path, "http://cache/people/")
|
||||
end
|
||||
|
||||
match "/agents-in-position/*path", %{ accept: [:json], layer: :api} do
|
||||
Proxy.forward conn, path, "http://cache/agents-in-position/"
|
||||
match "/agents-in-position/*path", %{accept: [:json], layer: :api} do
|
||||
Proxy.forward(conn, path, "http://cache/agents-in-position/")
|
||||
end
|
||||
|
||||
match "/posts/*path", %{ accept: [:json], layer: :api} do
|
||||
Proxy.forward conn, path, "http://cache/posts/"
|
||||
match "/posts/*path", %{accept: [:json], layer: :api} do
|
||||
Proxy.forward(conn, path, "http://cache/posts/")
|
||||
end
|
||||
|
||||
match "/mandatories/*path", %{ accept: [:json], layer: :api} do
|
||||
Proxy.forward conn, path, "http://cache/mandatories/"
|
||||
match "/mandatories/*path", %{accept: [:json], layer: :api} do
|
||||
Proxy.forward(conn, path, "http://cache/mandatories/")
|
||||
end
|
||||
|
||||
match "/mandatory-status-codes/*path", %{ accept: [:json], layer: :api} do
|
||||
Proxy.forward conn, path, "http://cache/mandatory-status-codes/"
|
||||
match "/mandatory-status-codes/*path", %{accept: [:json], layer: :api} do
|
||||
Proxy.forward(conn, path, "http://cache/mandatory-status-codes/")
|
||||
end
|
||||
|
||||
match "/worship-mandatories/*path", %{ accept: [:json], layer: :api} do
|
||||
Proxy.forward conn, path, "http://cache/worship-mandatories/"
|
||||
match "/worship-mandatories/*path", %{accept: [:json], layer: :api} do
|
||||
Proxy.forward(conn, path, "http://cache/worship-mandatories/")
|
||||
end
|
||||
|
||||
match "/half-elections/*path", %{ accept: [:json], layer: :api} do
|
||||
Proxy.forward conn, path, "http://cache/half-elections/"
|
||||
match "/half-elections/*path", %{accept: [:json], layer: :api} do
|
||||
Proxy.forward(conn, path, "http://cache/half-elections/")
|
||||
end
|
||||
|
||||
match "/contact-points/*path", %{ accept: [:json], layer: :api} do
|
||||
Proxy.forward conn, path, "http://cache/contact-points/"
|
||||
match "/contact-points/*path", %{accept: [:json], layer: :api} do
|
||||
Proxy.forward(conn, path, "http://cache/contact-points/")
|
||||
end
|
||||
|
||||
match "/mandates/*path", %{ accept: [:json], layer: :api} do
|
||||
Proxy.forward conn, path, "http://cache/mandates/"
|
||||
match "/mandates/*path", %{accept: [:json], layer: :api} do
|
||||
Proxy.forward(conn, path, "http://cache/mandates/")
|
||||
end
|
||||
|
||||
match "/board-positions/*path", %{ accept: [:json], layer: :api} do
|
||||
Proxy.forward conn, path, "http://cache/board-positions/"
|
||||
match "/board-positions/*path", %{accept: [:json], layer: :api} do
|
||||
Proxy.forward(conn, path, "http://cache/board-positions/")
|
||||
end
|
||||
|
||||
match "/board-position-codes/*path", %{ accept: [:json], layer: :api} do
|
||||
Proxy.forward conn, path, "http://cache/board-position-codes/"
|
||||
match "/board-position-codes/*path", %{accept: [:json], layer: :api} do
|
||||
Proxy.forward(conn, path, "http://cache/board-position-codes/")
|
||||
end
|
||||
|
||||
match "/functionaries/*path", %{ accept: [:json], layer: :api} do
|
||||
Proxy.forward conn, path, "http://cache/functionaries/"
|
||||
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
|
||||
Proxy.forward conn, path, "http://cache/agent-status-codes/"
|
||||
match "/agent-status-codes/*path", %{accept: [:json], layer: :api} do
|
||||
Proxy.forward(conn, path, "http://cache/agent-status-codes/")
|
||||
end
|
||||
|
||||
match "/roles/*path", %{ accept: [:json], layer: :api} do
|
||||
Proxy.forward conn, path, "http://cache/roles/"
|
||||
match "/roles/*path", %{accept: [:json], layer: :api} do
|
||||
Proxy.forward(conn, path, "http://cache/roles/")
|
||||
end
|
||||
|
||||
match "/organizations/*path", %{ accept: [:json], layer: :api} do
|
||||
Proxy.forward conn, path, "http://cache/organizations/"
|
||||
match "/organizations/*path", %{accept: [:json], layer: :api} do
|
||||
Proxy.forward(conn, path, "http://cache/organizations/")
|
||||
end
|
||||
|
||||
match "/administrative-units/*path", %{ accept: [:json], layer: :api} do
|
||||
Proxy.forward conn, path, "http://resource/administrative-units/"
|
||||
match "/registered-organizations/*path", %{accept: [:json], layer: :api} do
|
||||
Proxy.forward(conn, path, "http://cache/registered-organizations/")
|
||||
end
|
||||
|
||||
match "/administrative-unit-classification-codes/*path", %{ accept: [:json], layer: :api} do
|
||||
Proxy.forward conn, path, "http://cache/administrative-unit-classification-codes/"
|
||||
match "/administrative-units/*path", %{accept: [:json], layer: :api} do
|
||||
Proxy.forward(conn, path, "http://cache/administrative-units/")
|
||||
end
|
||||
|
||||
match "/organization-classification-codes/*path", %{ accept: [:json], layer: :api} do
|
||||
Proxy.forward conn, path, "http://cache/organization-classification-codes/"
|
||||
match "/administrative-unit-classification-codes/*path", %{accept: [:json], layer: :api} do
|
||||
Proxy.forward(conn, path, "http://cache/administrative-unit-classification-codes/")
|
||||
end
|
||||
|
||||
match "/worship-administrative-units/*path", %{ accept: [:json], layer: :api} do
|
||||
Proxy.forward conn, path, "http://resource/worship-administrative-units/"
|
||||
match "/organization-classification-codes/*path", %{accept: [:json], layer: :api} do
|
||||
Proxy.forward(conn, path, "http://cache/organization-classification-codes/")
|
||||
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)
|
||||
match "/registered-organization-classification-codes/*path", %{accept: [:json], layer: :api} do
|
||||
Proxy.forward(conn, path, "http://cache/registered-organization-classification-codes/")
|
||||
end
|
||||
|
||||
match "/recognized-worship-types/*path", %{ accept: [:json], layer: :api} do
|
||||
Proxy.forward conn, path, "http://cache/recognized-worship-types/"
|
||||
match "/worship-administrative-units/*path", %{accept: [:json], layer: :api} do
|
||||
Proxy.forward(conn, path, "http://cache/worship-administrative-units/")
|
||||
end
|
||||
|
||||
match "/central-worship-services/*path", %{ accept: [:json], layer: :api} do
|
||||
Proxy.forward conn, path, "http://resource/central-worship-services/"
|
||||
match "/worship-services/*path", %{accept: [:json], layer: :api} do
|
||||
Proxy.forward(conn, path, "http://cache/worship-services/")
|
||||
end
|
||||
|
||||
match "/representative-bodies/*path", %{ accept: [:json], layer: :api} do
|
||||
Proxy.forward conn, path, "http://cache/representative-bodies/"
|
||||
match "/recognized-worship-types/*path", %{accept: [:json], layer: :api} do
|
||||
Proxy.forward(conn, path, "http://cache/recognized-worship-types/")
|
||||
end
|
||||
|
||||
match "/governing-bodies/*path", %{ accept: [:json], layer: :api} do
|
||||
Proxy.forward conn, path, "http://cache/governing-bodies/"
|
||||
match "/central-worship-services/*path", %{accept: [:json], layer: :api} do
|
||||
Proxy.forward(conn, path, "http://cache/central-worship-services/")
|
||||
end
|
||||
|
||||
match "/governing-body-classification-codes/*path", %{ accept: [:json], layer: :api} do
|
||||
Proxy.forward conn, path, "http://cache/governing-body-classification-codes/"
|
||||
match "/representative-bodies/*path", %{accept: [:json], layer: :api} do
|
||||
Proxy.forward(conn, path, "http://cache/representative-bodies/")
|
||||
end
|
||||
|
||||
match "/local-involvements/*path", %{ accept: [:json], layer: :api} do
|
||||
Proxy.forward conn, path, "http://resource/local-involvements/"
|
||||
match "/governing-bodies/*path", %{accept: [:json], layer: :api} do
|
||||
Proxy.forward(conn, path, "http://cache/governing-bodies/")
|
||||
end
|
||||
|
||||
match "/identifiers/*path", %{ accept: [:json], layer: :api} do
|
||||
Proxy.forward conn, path, "http://cache/identifiers/"
|
||||
match "/governing-body-classification-codes/*path", %{accept: [:json], layer: :api} do
|
||||
Proxy.forward(conn, path, "http://cache/governing-body-classification-codes/")
|
||||
end
|
||||
|
||||
match "/structured-identifiers/*path", %{ accept: [:json], layer: :api} do
|
||||
Proxy.forward conn, path, "http://cache/structured-identifiers/"
|
||||
match "/local-involvements/*path", %{accept: [:json], layer: :api} do
|
||||
Proxy.forward(conn, path, "http://cache/local-involvements/")
|
||||
end
|
||||
|
||||
match "/addresses/*path", %{ accept: [:json], layer: :api} do
|
||||
Proxy.forward conn, path, "http://cache/addresses/"
|
||||
match "/identifiers/*path", %{accept: [:json], layer: :api} do
|
||||
Proxy.forward(conn, path, "http://cache/identifiers/")
|
||||
end
|
||||
|
||||
match "/sites/*path", %{ accept: [:json], layer: :api} do
|
||||
Proxy.forward conn, path, "http://cache/sites/"
|
||||
match "/structured-identifiers/*path", %{accept: [:json], layer: :api} do
|
||||
Proxy.forward(conn, path, "http://cache/structured-identifiers/")
|
||||
end
|
||||
|
||||
match "/change-events/*path", %{ accept: [:json], layer: :api} do
|
||||
Proxy.forward conn, path, "http://cache/change-events/"
|
||||
match "/addresses/*path", %{accept: [:json], layer: :api} do
|
||||
Proxy.forward(conn, path, "http://cache/addresses/")
|
||||
end
|
||||
|
||||
match "/change-event-types/*path", %{ accept: [:json], layer: :api} do
|
||||
Proxy.forward conn, path, "http://cache/change-event-types/"
|
||||
match "/sites/*path", %{accept: [:json], layer: :api} do
|
||||
Proxy.forward(conn, path, "http://cache/sites/")
|
||||
end
|
||||
|
||||
match "/change-event-results/*path", %{ accept: [:json], layer: :api} do
|
||||
Proxy.forward conn, path, "http://cache/change-event-results/"
|
||||
match "/change-events/*path", %{accept: [:json], layer: :api} do
|
||||
Proxy.forward(conn, path, "http://cache/change-events/")
|
||||
end
|
||||
|
||||
match "/organization-status-codes/*path", %{ accept: [:json], layer: :api} do
|
||||
Proxy.forward conn, path, "http://cache/organization-status-codes/"
|
||||
match "/change-event-types/*path", %{accept: [:json], layer: :api} do
|
||||
Proxy.forward(conn, path, "http://cache/change-event-types/")
|
||||
end
|
||||
|
||||
match "/locations/*path", %{ accept: [:json], layer: :api} do
|
||||
Proxy.forward conn, path, "http://cache/locations/"
|
||||
match "/change-event-results/*path", %{accept: [:json], layer: :api} do
|
||||
Proxy.forward(conn, path, "http://cache/change-event-results/")
|
||||
end
|
||||
|
||||
match "/involvement-types/*path", %{ accept: [:json], layer: :api} do
|
||||
Proxy.forward conn, path, "http://cache/involvement-types/"
|
||||
match "/organization-status-codes/*path", %{accept: [:json], layer: :api} do
|
||||
Proxy.forward(conn, path, "http://cache/organization-status-codes/")
|
||||
end
|
||||
|
||||
match "/ministers/*path", %{ accept: [:json], layer: :api} do
|
||||
Proxy.forward conn, path, "http://cache/ministers/"
|
||||
match "/locations/*path", %{accept: [:json], layer: :api} do
|
||||
Proxy.forward(conn, path, "http://cache/locations/")
|
||||
end
|
||||
|
||||
match "/minister-conditions/*path", %{ accept: [:json], layer: :api} do
|
||||
Proxy.forward conn, path, "http://cache/minister-conditions/"
|
||||
match "/involvement-types/*path", %{accept: [:json], layer: :api} do
|
||||
Proxy.forward(conn, path, "http://cache/involvement-types/")
|
||||
end
|
||||
|
||||
match "/dates-of-birth/*path", %{ accept: [:json], layer: :api} do
|
||||
Proxy.forward conn, path, "http://cache/dates-of-birth/"
|
||||
match "/ministers/*path", %{accept: [:json], layer: :api} do
|
||||
Proxy.forward(conn, path, "http://cache/ministers/")
|
||||
end
|
||||
|
||||
match "/nationalities/*path", %{ accept: [:json], layer: :api} do
|
||||
Proxy.forward conn, path, "http://cache/nationalities/"
|
||||
match "/minister-conditions/*path", %{accept: [:json], layer: :api} do
|
||||
Proxy.forward(conn, path, "http://cache/minister-conditions/")
|
||||
end
|
||||
|
||||
match "/gender-codes/*path", %{ accept: [:json], layer: :api} do
|
||||
Proxy.forward conn, path, "http://cache/gender-codes/"
|
||||
end
|
||||
match "/concepts/*path", %{ accept: [:json], layer: :api} do
|
||||
Proxy.forward conn, path, "http://cache/concepts/"
|
||||
match "/dates-of-birth/*path", %{accept: [:json], layer: :api} do
|
||||
Proxy.forward(conn, path, "http://cache/dates-of-birth/")
|
||||
end
|
||||
|
||||
match "/minister-positions/*path", %{ accept: [:json], layer: :api} do
|
||||
Proxy.forward conn, path, "http://cache/minister-positions/"
|
||||
match "/nationalities/*path", %{accept: [:json], layer: :api} do
|
||||
Proxy.forward(conn, path, "http://cache/nationalities/")
|
||||
end
|
||||
|
||||
match "/minister-position-functions/*path", %{ accept: [:json], layer: :api} do
|
||||
Proxy.forward conn, path, "http://cache/minister-position-functions/"
|
||||
match "/gender-codes/*path", %{accept: [:json], layer: :api} do
|
||||
Proxy.forward(conn, path, "http://cache/gender-codes/")
|
||||
end
|
||||
|
||||
match "/financing-codes/*path", %{ accept: [:json], layer: :api} do
|
||||
Proxy.forward conn, path, "http://cache/financing-codes/"
|
||||
match "/concepts/*path", %{accept: [:json], layer: :api} do
|
||||
Proxy.forward(conn, path, "http://cache/concepts/")
|
||||
end
|
||||
|
||||
match "/minister-condition-criterions/*path", %{ accept: [:json], layer: :api} do
|
||||
Proxy.forward conn, path, "http://cache/minister-condition-criterions/"
|
||||
match "/minister-positions/*path", %{accept: [:json], layer: :api} do
|
||||
Proxy.forward(conn, path, "http://cache/minister-positions/")
|
||||
end
|
||||
|
||||
match "/document-types-criterions/*path", %{ accept: [:json], layer: :api} do
|
||||
Proxy.forward conn, path, "http://cache/document-types-criterions/"
|
||||
match "/minister-position-functions/*path", %{accept: [:json], layer: :api} do
|
||||
Proxy.forward(conn, path, "http://cache/minister-position-functions/")
|
||||
end
|
||||
|
||||
match "/site-types/*path", %{ accept: [:json], layer: :api} do
|
||||
Proxy.forward conn, path, "http://cache/site-types/"
|
||||
match "/financing-codes/*path", %{accept: [:json], layer: :api} do
|
||||
Proxy.forward(conn, path, "http://cache/financing-codes/")
|
||||
end
|
||||
|
||||
match "/request-reasons/*path", %{ accept: [:json], layer: :api} do
|
||||
Proxy.forward conn, path, "http://cache/request-reasons/"
|
||||
match "/minister-condition-criterions/*path", %{accept: [:json], layer: :api} do
|
||||
Proxy.forward(conn, path, "http://cache/minister-condition-criterions/")
|
||||
end
|
||||
|
||||
match "/decisions/*path", %{ accept: [:json], layer: :api} do
|
||||
Proxy.forward conn, path, "http://cache/decisions/"
|
||||
match "/document-types-criterions/*path", %{accept: [:json], layer: :api} do
|
||||
Proxy.forward(conn, path, "http://cache/document-types-criterions/")
|
||||
end
|
||||
|
||||
match "/decision-activities/*path", %{ accept: [:json], layer: :api} do
|
||||
Proxy.forward conn, path, "http://cache/decision-activities/"
|
||||
match "/site-types/*path", %{accept: [:json], layer: :api} do
|
||||
Proxy.forward(conn, path, "http://cache/site-types/")
|
||||
end
|
||||
|
||||
match "/request-reasons/*path", %{accept: [:json], layer: :api} do
|
||||
Proxy.forward(conn, path, "http://cache/request-reasons/")
|
||||
end
|
||||
|
||||
match "/decisions/*path", %{accept: [:json], layer: :api} do
|
||||
Proxy.forward(conn, path, "http://cache/decisions/")
|
||||
end
|
||||
|
||||
match "/decision-activities/*path", %{accept: [:json], layer: :api} do
|
||||
Proxy.forward(conn, path, "http://cache/decision-activities/")
|
||||
end
|
||||
|
||||
match "/memberships/*path", %{accept: [:json], layer: :api} do
|
||||
Proxy.forward(conn, path, "http://cache/memberships/")
|
||||
end
|
||||
|
||||
match "/membership-roles/*path", %{accept: [:json], layer: :api} do
|
||||
Proxy.forward(conn, path, "http://cache/membership-roles/")
|
||||
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
|
||||
###############
|
||||
|
||||
match "/accounts", %{ accept: [:json], layer: :api} do
|
||||
Proxy.forward conn, [], "http://resource/accounts/"
|
||||
end
|
||||
match "/accounts/*path", %{ accept: [:json], layer: :api} do
|
||||
Proxy.forward conn, path, "http://accountdetail/accounts/"
|
||||
end
|
||||
match "/active-role/*path", %{ accept: [:json], layer: :api} do
|
||||
Proxy.forward conn, path, "http://roles/"
|
||||
end
|
||||
match "/groups/*path", %{ accept: [:json], layer: :api} do
|
||||
Proxy.forward conn, path, "http://resource/groups/"
|
||||
match "/accounts", %{accept: [:json], layer: :api} do
|
||||
Proxy.forward(conn, [], "http://resource/accounts/")
|
||||
end
|
||||
|
||||
match "/mock/sessions/*path", %{ accept: [:any], layer: :api} do
|
||||
Proxy.forward conn, path, "http://mocklogin/sessions/"
|
||||
match "/accounts/*path", %{accept: [:json], layer: :api} do
|
||||
Proxy.forward(conn, path, "http://accountdetail/accounts/")
|
||||
end
|
||||
|
||||
match "/sessions/*path", %{ accept: [:any], layer: :api} do
|
||||
Proxy.forward conn, path, "http://login/sessions/"
|
||||
match "/active-role/*path", %{accept: [:json], layer: :api} do
|
||||
Proxy.forward(conn, path, "http://roles/")
|
||||
end
|
||||
|
||||
match "/groups/*path", %{accept: [:json], layer: :api} do
|
||||
Proxy.forward(conn, path, "http://resource/groups/")
|
||||
end
|
||||
|
||||
match "/mock/sessions/*path", %{accept: [:any], layer: :api} do
|
||||
Proxy.forward(conn, path, "http://mocklogin/sessions/")
|
||||
end
|
||||
|
||||
match "/sessions/*path", %{accept: [:any], layer: :api} do
|
||||
Proxy.forward(conn, path, "http://login/sessions/")
|
||||
end
|
||||
|
||||
###############################################################
|
||||
# SEARCH
|
||||
###############################################################
|
||||
|
||||
match "/search/*path", %{ accept: %{ json: true }, layer: :api_services} do
|
||||
IO.puts("hey")
|
||||
Proxy.forward conn, path, "http://search/"
|
||||
match "/search/*path", %{accept: %{json: true}, layer: :api_services} do
|
||||
Proxy.forward(conn, path, "http://search/")
|
||||
end
|
||||
|
||||
###############
|
||||
# API SERVICES
|
||||
###############
|
||||
|
||||
match "/v3/api-docs/*path", %{ layer: :api_services, accept: %{ json: true } } do
|
||||
forward conn, path, "http://kalliope-api/v3/api-docs/"
|
||||
match "/v3/api-docs/*path", %{layer: :api_services, accept: %{json: true}} do
|
||||
forward(conn, path, "http://kalliope-api/v3/api-docs/")
|
||||
end
|
||||
|
||||
match "/consolidated/*path", %{ layer: :api_services, accept: %{ json: true } } do
|
||||
forward conn, path, "http://kalliope-api/consolidated/"
|
||||
match "/consolidated/*path", %{layer: :api_services, accept: %{json: true}} do
|
||||
forward(conn, path, "http://kalliope-api/consolidated/")
|
||||
end
|
||||
|
||||
match "/adresses-register/*path", %{ layer: :api_services, accept: %{ json: true } } do
|
||||
forward conn, path, "http://adressenregister/"
|
||||
match "/adresses-register/*path", %{layer: :api_services, accept: %{json: true}} do
|
||||
forward(conn, path, "http://adressenregister/")
|
||||
end
|
||||
|
||||
match "/worship/person-information-updates/*path", %{ layer: :api_services, accept: %{ json: true } } do
|
||||
forward conn, path, "http://privacy-worship/person-information-updates"
|
||||
match "/worship/person-information-updates/*path", %{
|
||||
layer: :api_services,
|
||||
accept: %{json: true}
|
||||
} do
|
||||
forward(conn, path, "http://privacy-worship/person-information-updates")
|
||||
end
|
||||
|
||||
match "/worship/person-information-requests/*path", %{ layer: :api_services, accept: %{ json: true } } do
|
||||
forward conn, path, "http://privacy-worship/person-information-requests"
|
||||
match "/worship/person-information-requests/*path", %{
|
||||
layer: :api_services,
|
||||
accept: %{json: true}
|
||||
} do
|
||||
forward(conn, path, "http://privacy-worship/person-information-requests")
|
||||
end
|
||||
|
||||
match "/worship/person-information-ask/*path", %{ layer: :api_services, accept: %{ json: true } } do
|
||||
forward conn, path, "http://privacy-worship/person-information-ask/"
|
||||
match "/worship/person-information-ask/*path", %{layer: :api_services, accept: %{json: true}} do
|
||||
forward(conn, path, "http://privacy-worship/person-information-ask/")
|
||||
end
|
||||
|
||||
match "/worship/person-information-validate-ssn/*path", %{ layer: :api_services, accept: %{ json: true } } do
|
||||
forward conn, path, "http://privacy-worship/person-information-validate-ssn/"
|
||||
match "/worship/person-information-validate-ssn/*path", %{
|
||||
layer: :api_services,
|
||||
accept: %{json: true}
|
||||
} do
|
||||
forward(conn, path, "http://privacy-worship/person-information-validate-ssn/")
|
||||
end
|
||||
|
||||
match "/person-information-updates/*path", %{ layer: :api_services, accept: %{ json: true } } do
|
||||
forward conn, path, "http://privacy-unit/person-information-updates"
|
||||
match "/person-information-updates/*path", %{layer: :api_services, accept: %{json: true}} do
|
||||
forward(conn, path, "http://privacy-unit/person-information-updates")
|
||||
end
|
||||
|
||||
match "/person-information-requests/*path", %{ layer: :api_services, accept: %{ json: true } } do
|
||||
forward conn, path, "http://privacy-unit/person-information-requests"
|
||||
match "/person-information-requests/*path", %{layer: :api_services, accept: %{json: true}} do
|
||||
forward(conn, path, "http://privacy-unit/person-information-requests")
|
||||
end
|
||||
|
||||
match "/person-information-ask/*path", %{ layer: :api_services, accept: %{ json: true } } do
|
||||
forward conn, path, "http://privacy-unit/person-information-ask/"
|
||||
match "/person-information-ask/*path", %{layer: :api_services, accept: %{json: true}} do
|
||||
forward(conn, path, "http://privacy-unit/person-information-ask/")
|
||||
end
|
||||
|
||||
match "/person-information-validate-ssn/*path", %{ layer: :api_services, accept: %{ json: true } } do
|
||||
forward conn, path, "http://privacy-unit/person-information-validate-ssn/"
|
||||
match "/person-information-validate-ssn/*path", %{layer: :api_services, accept: %{json: true}} do
|
||||
forward(conn, path, "http://privacy-unit/person-information-validate-ssn/")
|
||||
end
|
||||
|
||||
get "/uri-info/*path", %{ layer: :api_services, accept: %{ json: true } } do
|
||||
forward conn, path, "http://uri-info/"
|
||||
get "/uri-info/*path", %{layer: :api_services, accept: %{json: true}} 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 "/sync-ovo-number/*path", %{ layer: :api_services, accept: %{ json: true } } do
|
||||
forward conn, path, "http://sync-ovo-numbers/sync-from-kbo/"
|
||||
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/"
|
||||
get "/ldes/*path", %{layer: :api_services} do
|
||||
forward(conn, path, "http://ldes-backend/")
|
||||
end
|
||||
|
||||
#################################################################
|
||||
# ERROR REPORT
|
||||
#################################################################
|
||||
|
||||
match "/error-reports/*path", %{ layer: :api_services, accept: %{ json: true } } do
|
||||
forward conn, path, "http://error-report-service/error-reports/"
|
||||
match "/error-reports/*path", %{layer: :api_services, accept: %{json: true}} do
|
||||
forward(conn, path, "http://error-report-service/error-reports/")
|
||||
end
|
||||
|
||||
#################################################################
|
||||
# FILES
|
||||
#################################################################
|
||||
|
||||
get "/files/:id/download", %{ accept: [:any], } do
|
||||
Proxy.forward conn, [], "http://file/files/" <> id <> "/download"
|
||||
get "/files/:id/download", %{accept: [:any]} do
|
||||
Proxy.forward(conn, [], "http://file/files/" <> id <> "/download")
|
||||
end
|
||||
|
||||
get "/files/*path" , %{ layer: :api_services, accept: %{ json: true } } do
|
||||
Proxy.forward conn, path, "http://resource/files/"
|
||||
get "/files/*path", %{layer: :api_services, accept: %{json: true}} do
|
||||
Proxy.forward(conn, path, "http://resource/files/")
|
||||
end
|
||||
|
||||
#################################################################
|
||||
# DCAT
|
||||
#################################################################
|
||||
|
||||
get "/datasets/*path", %{ layer: :api_services, accept: %{ json: true } } do
|
||||
Proxy.forward conn, path, "http://resource/datasets/"
|
||||
get "/datasets/*path", %{layer: :api_services, accept: %{json: true}} do
|
||||
Proxy.forward(conn, path, "http://resource/datasets/")
|
||||
end
|
||||
|
||||
get "/distributions/*path", %{ layer: :api_services, accept: %{ json: true } } do
|
||||
Proxy.forward conn, path, "http://resource/distributions/"
|
||||
get "/distributions/*path", %{layer: :api_services, accept: %{json: true}} do
|
||||
Proxy.forward(conn, path, "http://resource/distributions/")
|
||||
end
|
||||
|
||||
#################################################################
|
||||
@@ -354,7 +389,7 @@ defmodule Dispatcher do
|
||||
#################################################################
|
||||
|
||||
get "/sync/organizations/files/*path" do
|
||||
Proxy.forward conn, path, "http://delta-producer-pub-graph-maintainer-organizations/files/"
|
||||
Proxy.forward conn, path, "http://delta-producer-publication-graph-maintainer/organizations/files/"
|
||||
end
|
||||
|
||||
#################################################################
|
||||
@@ -362,7 +397,7 @@ defmodule Dispatcher do
|
||||
#################################################################
|
||||
|
||||
get "/sync/organizations-public-info/files/*path" do
|
||||
Proxy.forward conn, path, "http://delta-producer-pub-graph-maintainer-organizations-public-info/files/"
|
||||
Proxy.forward(conn, path, "http://delta-producer-publication-graph-maintainer/organizations-public-info/files/")
|
||||
end
|
||||
|
||||
#################################################################
|
||||
@@ -370,7 +405,7 @@ defmodule Dispatcher do
|
||||
#################################################################
|
||||
|
||||
get "/sync/public/files/*path" do
|
||||
Proxy.forward conn, path, "http://delta-producer-pub-graph-maintainer-public/files/"
|
||||
Proxy.forward(conn, path, "http://delta-producer-publication-graph-maintainer/public/files/")
|
||||
end
|
||||
|
||||
#################################################################
|
||||
@@ -378,7 +413,7 @@ 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
|
||||
|
||||
#################################################################
|
||||
@@ -386,44 +421,42 @@ defmodule Dispatcher do
|
||||
#################################################################
|
||||
|
||||
get "/download-exports/*path" do
|
||||
Proxy.forward conn, path, "http://download-exports/"
|
||||
Proxy.forward(conn, path, "http://download-exports/")
|
||||
end
|
||||
|
||||
###############################################################
|
||||
# frontend layer
|
||||
###############################################################
|
||||
|
||||
match "/assets/*path", %{ layer: :api } do
|
||||
Proxy.forward conn, path, "http://frontend/assets/"
|
||||
match "/assets/*path", %{layer: :api} do
|
||||
Proxy.forward(conn, path, "http://frontend/assets/")
|
||||
end
|
||||
|
||||
match "/@appuniversum/*path", %{ layer: :api } do
|
||||
Proxy.forward conn, path, "http://frontend/@appuniversum/"
|
||||
match "/@appuniversum/*path", %{layer: :api} do
|
||||
Proxy.forward(conn, path, "http://frontend/@appuniversum/")
|
||||
end
|
||||
|
||||
match "/*path", %{ accept: [:html], layer: :api } do
|
||||
Proxy.forward conn, [], "http://frontend/index.html"
|
||||
match "/*path", %{accept: [:html], layer: :api} do
|
||||
Proxy.forward(conn, [], "http://frontend/index.html")
|
||||
end
|
||||
|
||||
match "/*_path", %{ layer: :frontend } do
|
||||
Proxy.forward conn, [], "http://frontend/index.html"
|
||||
match "/*_path", %{layer: :frontend} do
|
||||
Proxy.forward(conn, [], "http://frontend/index.html")
|
||||
end
|
||||
|
||||
###############################################################
|
||||
# sparql endpoint
|
||||
###############################################################
|
||||
|
||||
post "/sparql/*path", %{ layer: :api_services, accept: %{ sparql_json: true } } do
|
||||
forward conn, path, "http://db:8890/sparql/"
|
||||
post "/sparql/*path", %{layer: :api_services, accept: %{sparql_json: true}} do
|
||||
forward(conn, path, "http://db:8890/sparql/")
|
||||
end
|
||||
|
||||
###############################################################
|
||||
# errors
|
||||
###############################################################
|
||||
|
||||
match "/*_path", %{ accept: [:any], layer: :not_found} do
|
||||
send_resp( conn, 404, "{\"error\": {\"code\": 404}")
|
||||
match "/*_path", %{accept: [:any], layer: :not_found} do
|
||||
send_resp(conn, 404, "{\"error\": {\"code\": 404}")
|
||||
end
|
||||
|
||||
|
||||
end
|
||||
|
||||
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
|
||||
@@ -1,32 +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,
|
||||
TARGET_GRAPH,
|
||||
LANDING_ZONE_DATABASE_ENDPOINT
|
||||
};
|
||||
@@ -1,72 +0,0 @@
|
||||
|
||||
const PREFIXES = `
|
||||
PREFIX org: <http://www.w3.org/ns/org#>
|
||||
PREFIX mandaat: <http://data.vlaanderen.be/ns/mandaat#>
|
||||
PREFIX lblodlg: <http://data.lblod.info/vocabularies/leidinggevenden/>
|
||||
PREFIX besluit: <http://data.vlaanderen.be/ns/besluit#>`
|
||||
|
||||
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: [
|
||||
// Case Leidnggevenden
|
||||
// They can be triggered when being inserted or when their link to a bestuursfunctie is added
|
||||
{
|
||||
trigger: { // subjectType or predicateValue
|
||||
subjectType: "lblodlg:Functionaris"
|
||||
},
|
||||
queryTemplate: (subject) => `
|
||||
${PREFIXES}
|
||||
CONSTRUCT {
|
||||
?functionaris org:holds ?bestuursfunctie ;
|
||||
?p ?o .
|
||||
?orgaanInTime lblodlg:heeftBestuursfunctie ?bestuursfunctie ;
|
||||
mandaat:isTijdspecialisatieVan ?orgaan .
|
||||
?orgaan besluit:bestuurt ?eenheid .
|
||||
?eenheid besluit:classificatie ?classification .
|
||||
} WHERE {
|
||||
GRAPH <http://mu.semte.ch/graphs/landing-zone/leidinggevenden> {
|
||||
VALUES ?functionaris { ${subject} }
|
||||
?functionaris org:holds ?bestuursfunctie ;
|
||||
?p ?o .
|
||||
?orgaanInTime lblodlg:heeftBestuursfunctie ?bestuursfunctie ;
|
||||
mandaat:isTijdspecialisatieVan ?orgaan .
|
||||
?orgaan besluit:bestuurt ?eenheid .
|
||||
?eenheid besluit:classificatie ?classification .
|
||||
}
|
||||
}`
|
||||
},
|
||||
{
|
||||
trigger: {
|
||||
predicateValue: "org:holds"
|
||||
},
|
||||
queryTemplate: (subject) => `
|
||||
${PREFIXES}
|
||||
CONSTRUCT {
|
||||
?functionaris org:holds ?bestuursfunctie ;
|
||||
?p ?o .
|
||||
?orgaanInTime lblodlg:heeftBestuursfunctie ?bestuursfunctie ;
|
||||
mandaat:isTijdspecialisatieVan ?orgaan .
|
||||
?orgaan besluit:bestuurt ?eenheid .
|
||||
?eenheid besluit:classificatie ?classification .
|
||||
} WHERE {
|
||||
GRAPH <http://mu.semte.ch/graphs/landing-zone/leidinggevenden> {
|
||||
VALUES ?functionaris { ${subject} }
|
||||
?functionaris org:holds ?bestuursfunctie ;
|
||||
?p ?o .
|
||||
?orgaanInTime lblodlg:heeftBestuursfunctie ?bestuursfunctie ;
|
||||
mandaat:isTijdspecialisatieVan ?orgaan .
|
||||
?orgaan besluit:bestuurt ?eenheid .
|
||||
?eenheid besluit:classificatie ?classification .
|
||||
}
|
||||
}`
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
contextConfig,
|
||||
PREFIXES
|
||||
};
|
||||
@@ -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,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,72 +0,0 @@
|
||||
|
||||
const PREFIXES = `
|
||||
PREFIX org: <http://www.w3.org/ns/org#>
|
||||
PREFIX mandaat: <http://data.vlaanderen.be/ns/mandaat#>
|
||||
PREFIX lblodlg: <http://data.lblod.info/vocabularies/leidinggevenden/>
|
||||
PREFIX besluit: <http://data.vlaanderen.be/ns/besluit#>`
|
||||
|
||||
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: [
|
||||
// Case Mandatarissen
|
||||
// They can be triggered when being inserted or when their link to a mandate is added
|
||||
{
|
||||
trigger: { // subjectType or predicateValue
|
||||
subjectType: "mandaat:Mandataris"
|
||||
},
|
||||
queryTemplate: (subject) => `
|
||||
${PREFIXES}
|
||||
CONSTRUCT {
|
||||
?mandataris org:holds ?mandate ;
|
||||
?p ?o .
|
||||
?orgaanInTime org:hasPost ?mandate ;
|
||||
mandaat:isTijdspecialisatieVan ?orgaan .
|
||||
?orgaan besluit:bestuurt ?eenheid .
|
||||
?eenheid besluit:classificatie ?classification .
|
||||
} WHERE {
|
||||
GRAPH <http://mu.semte.ch/graphs/landing-zone/mandatarissen> {
|
||||
VALUES ?mandataris { ${subject} }
|
||||
?mandataris org:holds ?mandate ;
|
||||
?p ?o .
|
||||
?orgaanInTime org:hasPost ?mandate ;
|
||||
mandaat:isTijdspecialisatieVan ?orgaan .
|
||||
?orgaan besluit:bestuurt ?eenheid .
|
||||
?eenheid besluit:classificatie ?classification .
|
||||
}
|
||||
}`
|
||||
},
|
||||
{
|
||||
trigger: {
|
||||
predicateValue: "org:holds"
|
||||
},
|
||||
queryTemplate: (subject) => `
|
||||
${PREFIXES}
|
||||
CONSTRUCT {
|
||||
?mandataris org:holds ?mandate ;
|
||||
?p ?o .
|
||||
?orgaanInTime org:hasPost ?mandate ;
|
||||
mandaat:isTijdspecialisatieVan ?orgaan .
|
||||
?orgaan besluit:bestuurt ?eenheid .
|
||||
?eenheid besluit:classificatie ?classification .
|
||||
} WHERE {
|
||||
GRAPH <http://mu.semte.ch/graphs/landing-zone/mandatarissen> {
|
||||
VALUES ?mandataris { ${subject} }
|
||||
?mandataris org:holds ?mandate ;
|
||||
?p ?o .
|
||||
?orgaanInTime org:hasPost ?mandate ;
|
||||
mandaat:isTijdspecialisatieVan ?orgaan .
|
||||
?orgaan besluit:bestuurt ?eenheid .
|
||||
?eenheid besluit:classificatie ?classification .
|
||||
}
|
||||
}`
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
contextConfig,
|
||||
PREFIXES
|
||||
};
|
||||
@@ -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, transformedPrivateDeletes);
|
||||
}
|
||||
}
|
||||
|
||||
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,15 @@
|
||||
DELETE {
|
||||
GRAPH ?g {
|
||||
<http://data.lblod.info/id/bestuurseenheden/8d6609b4-1a20-46b8-97ed-150c6d53acd6> <http://www.w3.org/ns/regorg#orgStatus> ?orgStatus .
|
||||
}
|
||||
}
|
||||
INSERT {
|
||||
GRAPH ?g {
|
||||
<http://data.lblod.info/id/bestuurseenheden/8d6609b4-1a20-46b8-97ed-150c6d53acd6> <http://www.w3.org/ns/regorg#orgStatus> <http://lblod.data.gift/concepts/d02c4e12bf88d2fdf5123b07f29c9311> .
|
||||
}
|
||||
}
|
||||
WHERE {
|
||||
GRAPH ?g {
|
||||
<http://data.lblod.info/id/bestuurseenheden/8d6609b4-1a20-46b8-97ed-150c6d53acd6> <http://www.w3.org/ns/regorg#orgStatus> ?orgStatus .
|
||||
}
|
||||
}
|
||||
@@ -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,196 @@
|
||||
DELETE {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?bestuursorganen ?bestuursorganenP ?bestuursorganenO .
|
||||
}
|
||||
}
|
||||
WHERE {
|
||||
VALUES ?bestuursorganen {
|
||||
<http://data.lblod.info/id/bestuursorganen/24d8e602a8ddbe0adf3dea8c40277706>
|
||||
<http://data.lblod.info/id/bestuursorganen/dad1789d9b9f8f6cb3c81cc2ca88154f>
|
||||
<http://data.lblod.info/id/bestuursorganen/b90d16f2c8043bc20b88da232c0389fc>
|
||||
<http://data.lblod.info/id/bestuursorganen/2f27a688e1728c1906a4bbd8670d7810>
|
||||
}
|
||||
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?bestuursorganen ?bestuursorganenP ?bestuursorganenO .
|
||||
}
|
||||
}
|
||||
|
||||
;
|
||||
|
||||
DELETE {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?bestuursorganenInTijd ?bestuursorganenInTijdP ?bestuursorganenInTijdO .
|
||||
}
|
||||
}
|
||||
WHERE {
|
||||
VALUES ?bestuursorganenInTijd {
|
||||
<http://data.lblod.info/id/bestuursorganen/c5bb7bca7363109b94b58b1aef6ed59c>
|
||||
<http://data.lblod.info/id/bestuursorganen/8d43a29c6ed4a8af0cd43d4aba2c7014>
|
||||
<http://data.lblod.info/id/bestuursorganen/f54979f47464bae1cc001788aedb8b86>
|
||||
<http://data.lblod.info/id/bestuursorganen/c9a7d9130e1dd8f26ddb8c96fdd94c64>
|
||||
}
|
||||
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?bestuursorganenInTijd ?bestuursorganenInTijdP ?bestuursorganenInTijdO .
|
||||
}
|
||||
}
|
||||
|
||||
;
|
||||
|
||||
DELETE {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?identifier ?identifierP ?identifierO .
|
||||
}
|
||||
}
|
||||
WHERE {
|
||||
VALUES ?identifier {
|
||||
<http://data.lblod.info/id/identificatoren/99554be7-29d2-403a-a7d5-bda842b4bd86>
|
||||
<http://data.lblod.info/id/identificatoren/19847e1b-a2bf-48a1-872e-baf8d4efaa12>
|
||||
<http://data.lblod.info/id/identificatoren/b2123d27-b6bc-4e70-b594-27d35c696713>
|
||||
}
|
||||
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?identifier ?identifierP ?identifierO .
|
||||
}
|
||||
}
|
||||
|
||||
;
|
||||
|
||||
DELETE {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?structuredIdentifier ?structuredIdentifierP ?structuredIdentifierO .
|
||||
}
|
||||
}
|
||||
WHERE {
|
||||
VALUES ?structuredIdentifier {
|
||||
<http://data.lblod.info/id/gestructureerdeIdentificatoren/920f98a2-1785-4de1-81ed-5859c224dcb8>
|
||||
<http://data.lblod.info/id/gestructureerdeIdentificatoren/5e1082d8-7751-4bed-a53f-457b347f7f28>
|
||||
<http://data.lblod.info/id/gestructureerdeIdentificatoren/2e978403-d3ef-40ab-a9f9-3a4ae6a35609>
|
||||
}
|
||||
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?structuredIdentifier ?structuredIdentifierP ?structuredIdentifierO .
|
||||
}
|
||||
}
|
||||
|
||||
;
|
||||
|
||||
DELETE {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?site ?siteP ?siteO .
|
||||
}
|
||||
}
|
||||
WHERE {
|
||||
VALUES ?site {
|
||||
<http://data.lblod.info/id/vestigingen/daa79855-1de7-4479-8a2e-a8d89db55ee3>
|
||||
}
|
||||
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?site ?siteP ?siteO .
|
||||
}
|
||||
}
|
||||
|
||||
;
|
||||
|
||||
DELETE {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?address ?addressP ?addressO .
|
||||
}
|
||||
}
|
||||
WHERE {
|
||||
VALUES ?address {
|
||||
<http://data.lblod.info/id/adressen/df102cb4-8abb-4588-a199-1ce22c211812>
|
||||
}
|
||||
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?address ?addressP ?addressO .
|
||||
}
|
||||
}
|
||||
|
||||
;
|
||||
|
||||
DELETE {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?contactPoint ?contactPointP ?contactPointO .
|
||||
}
|
||||
}
|
||||
WHERE {
|
||||
VALUES ?contactPoint {
|
||||
<http://data.lblod.info/id/contact-punten/042e8816-2e9d-45a1-89f6-dcf805882af7>
|
||||
<http://data.lblod.info/id/contact-punten/364d8e1a-cb18-4970-aeaf-5f6f307370ad>
|
||||
}
|
||||
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?contactPoint ?contactPointP ?contactPointO .
|
||||
}
|
||||
}
|
||||
|
||||
;
|
||||
|
||||
DELETE {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?parentOrganization <http://www.w3.org/ns/org#hasSubOrganization> ?organization .
|
||||
}
|
||||
}
|
||||
WHERE {
|
||||
BIND(<http://data.lblod.info/id/bestuurseenheden/8d6609b4-1a20-46b8-97ed-150c6d53acd6> AS ?organization)
|
||||
BIND(<http://data.lblod.info/id/bestuurseenheden/6025a5d1ca2262a784f002edd8ce9ca9073ae3d5ebc6b6b5531f05a29e9250af> AS ?parentOrganization)
|
||||
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?parentOrganization <http://www.w3.org/ns/org#hasSubOrganization> ?organization .
|
||||
}
|
||||
}
|
||||
|
||||
;
|
||||
|
||||
DELETE {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?parentOrganization <http://mu.semte.ch/vocabularies/ext/isFounderOfOrganization> ?organization .
|
||||
}
|
||||
}
|
||||
WHERE {
|
||||
BIND(<http://data.lblod.info/id/bestuurseenheden/8d6609b4-1a20-46b8-97ed-150c6d53acd6> AS ?organization)
|
||||
BIND(<http://data.lblod.info/id/bestuurseenheden/6025a5d1ca2262a784f002edd8ce9ca9073ae3d5ebc6b6b5531f05a29e9250af> AS ?parentOrganization)
|
||||
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?parentOrganization <http://mu.semte.ch/vocabularies/ext/isFounderOfOrganization> ?organization .
|
||||
}
|
||||
}
|
||||
|
||||
;
|
||||
|
||||
DELETE {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?membership ?p ?o.
|
||||
}
|
||||
}
|
||||
WHERE {
|
||||
BIND(<http://data.lblod.info/id/bestuurseenheden/8d6609b4-1a20-46b8-97ed-150c6d53acd6> AS ?organization)
|
||||
|
||||
VALUES ?membershipP {
|
||||
<http://www.w3.org/ns/org#organization>
|
||||
<http://www.w3.org/ns/org#member>
|
||||
}
|
||||
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?membership a <http://www.w3.org/ns/org#Membership> ;
|
||||
?membershipP ?organization ;
|
||||
?p ?o .
|
||||
}
|
||||
}
|
||||
|
||||
;
|
||||
|
||||
DELETE {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?organization ?organizationP ?organizationO .
|
||||
}
|
||||
}
|
||||
WHERE {
|
||||
BIND(<http://data.lblod.info/id/bestuurseenheden/8d6609b4-1a20-46b8-97ed-150c6d53acd6> AS ?organization)
|
||||
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?organization ?organizationP ?organizationO .
|
||||
}
|
||||
}
|
||||
@@ -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)
|
||||
}
|
||||
3
config/migrations-triggering-indexing/local/README.md
Normal file
3
config/migrations-triggering-indexing/local/README.md
Normal file
@@ -0,0 +1,3 @@
|
||||
# Motivation
|
||||
|
||||
This folder is designed to contain migration files specific to a specific deployed instance of the app. These files will be ignored by git. The typical use case for this folder includes migrations containing sensitive data or those related to a re-sync of consumers. Migrations that should be applied to all instances of the app should be stored outside of this folder, but within the 'migrations-triggering-indexing' folder.
|
||||
@@ -0,0 +1,151 @@
|
||||
PREFIX mandaat: <http://data.vlaanderen.be/ns/mandaat#>
|
||||
PREFIX ch: <http://data.lblod.info/vocabularies/contacthub/>
|
||||
PREFIX ere: <http://data.lblod.info/vocabularies/erediensten/>
|
||||
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
|
||||
DELETE {
|
||||
GRAPH ?g {
|
||||
?s mandaat:start ?o .
|
||||
}
|
||||
}
|
||||
INSERT {
|
||||
GRAPH ?g {
|
||||
?s mandaat:start ?converteddate .
|
||||
}
|
||||
}
|
||||
WHERE {
|
||||
GRAPH ?g {
|
||||
?s mandaat:start ?o .
|
||||
}
|
||||
VALUES ?g {
|
||||
<http://mu.semte.ch/graphs/worship-service>
|
||||
<http://mu.semte.ch/graphs/administrative-unit>
|
||||
}
|
||||
BIND(IF(strlen(str(?o)) = 10, strdt(concat(str(?o), 'T02:00:00'), xsd:dateTime), ?o) as ?converteddate).
|
||||
}
|
||||
;
|
||||
DELETE {
|
||||
GRAPH ?g {
|
||||
?s mandaat:einde ?o .
|
||||
}
|
||||
}
|
||||
INSERT {
|
||||
GRAPH ?g {
|
||||
?s mandaat:einde ?converteddate .
|
||||
}
|
||||
}
|
||||
WHERE {
|
||||
GRAPH ?g {
|
||||
?s mandaat:einde ?o .
|
||||
}
|
||||
VALUES ?g {
|
||||
<http://mu.semte.ch/graphs/worship-service>
|
||||
<http://mu.semte.ch/graphs/administrative-unit>
|
||||
}
|
||||
BIND(IF(strlen(str(?o)) = 10, strdt(concat(str(?o), 'T02:00:00'), xsd:dateTime), ?o) as ?converteddate).
|
||||
}
|
||||
;
|
||||
DELETE {
|
||||
GRAPH ?g {
|
||||
?s mandaat:bindingStart ?o .
|
||||
}
|
||||
}
|
||||
INSERT {
|
||||
GRAPH ?g {
|
||||
?s mandaat:bindingStart ?converteddate .
|
||||
}
|
||||
}
|
||||
WHERE {
|
||||
GRAPH ?g {
|
||||
?s mandaat:bindingStart ?o .
|
||||
}
|
||||
VALUES ?g {
|
||||
<http://mu.semte.ch/graphs/worship-service>
|
||||
<http://mu.semte.ch/graphs/administrative-unit>
|
||||
}
|
||||
BIND(IF(strlen(str(?o)) = 10, strdt(concat(str(?o), 'T02:00:00'), xsd:dateTime), ?o) as ?converteddate).
|
||||
}
|
||||
;
|
||||
DELETE {
|
||||
GRAPH ?g {
|
||||
?s mandaat:bindingEinde ?o .
|
||||
}
|
||||
}
|
||||
INSERT {
|
||||
GRAPH ?g {
|
||||
?s mandaat:bindingEinde ?converteddate .
|
||||
}
|
||||
}
|
||||
WHERE {
|
||||
GRAPH ?g {
|
||||
?s mandaat:bindingEinde ?o .
|
||||
}
|
||||
VALUES ?g {
|
||||
<http://mu.semte.ch/graphs/worship-service>
|
||||
<http://mu.semte.ch/graphs/administrative-unit>
|
||||
}
|
||||
BIND(IF(strlen(str(?o)) = 10, strdt(concat(str(?o), 'T02:00:00'), xsd:dateTime), ?o) as ?converteddate).
|
||||
}
|
||||
;
|
||||
DELETE {
|
||||
GRAPH ?g {
|
||||
?s ch:startdatum ?o .
|
||||
}
|
||||
}
|
||||
INSERT {
|
||||
GRAPH ?g {
|
||||
?s ch:startdatum ?converteddate .
|
||||
}
|
||||
}
|
||||
WHERE {
|
||||
GRAPH ?g {
|
||||
?s ch:startdatum ?o .
|
||||
}
|
||||
VALUES ?g {
|
||||
<http://mu.semte.ch/graphs/worship-service>
|
||||
<http://mu.semte.ch/graphs/administrative-unit>
|
||||
}
|
||||
BIND(IF(strlen(str(?o)) = 10, strdt(concat(str(?o), 'T02:00:00'), xsd:dateTime), ?o) as ?converteddate).
|
||||
}
|
||||
;
|
||||
DELETE {
|
||||
GRAPH ?g {
|
||||
?s ch:eindedatum ?o .
|
||||
}
|
||||
}
|
||||
INSERT {
|
||||
GRAPH ?g {
|
||||
?s ch:eindedatum ?converteddate .
|
||||
}
|
||||
}
|
||||
WHERE {
|
||||
GRAPH ?g {
|
||||
?s ch:eindedatum ?o .
|
||||
}
|
||||
VALUES ?g {
|
||||
<http://mu.semte.ch/graphs/worship-service>
|
||||
<http://mu.semte.ch/graphs/administrative-unit>
|
||||
}
|
||||
BIND(IF(strlen(str(?o)) = 10, strdt(concat(str(?o), 'T02:00:00'), xsd:dateTime), ?o) as ?converteddate).
|
||||
}
|
||||
;
|
||||
DELETE {
|
||||
GRAPH ?g {
|
||||
?s ere:geplandeEinddatumAanstelling ?o .
|
||||
}
|
||||
}
|
||||
INSERT {
|
||||
GRAPH ?g {
|
||||
?s ere:geplandeEinddatumAanstelling ?converteddate .
|
||||
}
|
||||
}
|
||||
WHERE {
|
||||
GRAPH ?g {
|
||||
?s ere:geplandeEinddatumAanstelling ?o .
|
||||
}
|
||||
VALUES ?g {
|
||||
<http://mu.semte.ch/graphs/worship-service>
|
||||
<http://mu.semte.ch/graphs/administrative-unit>
|
||||
}
|
||||
BIND(IF(strlen(str(?o)) = 10, strdt(concat(str(?o), 'T02:00:00'), xsd:dateTime), ?o) as ?converteddate).
|
||||
}
|
||||
;
|
||||
@@ -2127,34 +2127,6 @@
|
||||
}
|
||||
|
||||
|
||||
INSERT {
|
||||
GRAPH ?g {
|
||||
?addressUri
|
||||
<https://data.vlaanderen.be/ns/adres#Adresvoorstelling.huisnummer> "15";
|
||||
|
||||
<http://www.w3.org/ns/locn#postCode> "8710";
|
||||
<http://www.w3.org/ns/locn#adminUnitL2> "Wielsbeke";
|
||||
<http://www.w3.org/ns/locn#thoroughfare> "Hernieuwenstraat";
|
||||
<https://data.vlaanderen.be/ns/adres#gemeentenaam> "Wielsbeke";
|
||||
<https://data.vlaanderen.be/ns/adres#land> "België";
|
||||
<http://www.w3.org/ns/locn#fullAddress> "Hernieuwenstraat 15, 8710 Wielsbeke, België".
|
||||
}
|
||||
}
|
||||
WHERE {
|
||||
GRAPH ?g {
|
||||
?adminUnit <http://www.w3.org/ns/adms#identifier> ?id ;
|
||||
<http://www.w3.org/ns/org#hasPrimarySite> ?site .
|
||||
|
||||
?id <http://www.w3.org/2004/02/skos/core#notation> "KBO nummer" ;
|
||||
<https://data.vlaanderen.be/ns/generiek#gestructureerdeIdentificator>/<https://data.vlaanderen.be/ns/generiek#lokaleIdentificator> "" .
|
||||
|
||||
?site <https://data.vlaanderen.be/ns/organisatie#bestaatUit> ?boundAddress .
|
||||
|
||||
BIND( ?boundAddress AS ?addressUri )
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
INSERT {
|
||||
GRAPH ?g {
|
||||
?addressUri
|
||||
|
||||
@@ -1554,31 +1554,3 @@
|
||||
?contact <http://schema.org/contactType> "Primary" .
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
INSERT {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?contact <http://schema.org/telephone> "tel:+3256674504" .
|
||||
?contact <http://xmlns.com/foaf/0.1/page> "https://www.wielsbeke.be/producten/woonzorgcentrum-ter-lembeek" .
|
||||
?contact <http://schema.org/email> "ouderenhuisvesting@wielsbeke.be" .
|
||||
}
|
||||
}
|
||||
WHERE {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?adminUnit <http://www.w3.org/ns/adms#identifier> ?id ;
|
||||
<http://www.w3.org/ns/org#hasPrimarySite> ?primarySite .
|
||||
?id <http://www.w3.org/2004/02/skos/core#notation> "KBO nummer" ;
|
||||
<https://data.vlaanderen.be/ns/generiek#gestructureerdeIdentificator>/<https://data.vlaanderen.be/ns/generiek#lokaleIdentificator> "" .
|
||||
|
||||
?primarySite <http://www.w3.org/ns/org#siteAddress> ?contact .
|
||||
|
||||
?contact <http://schema.org/contactType> "Primary" .
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,987 @@
|
||||
DELETE {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?addressUri <http://www.w3.org/ns/locn#adminUnitL2> ?province .
|
||||
}
|
||||
}
|
||||
INSERT {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?addressUri <http://www.w3.org/ns/locn#adminUnitL2> "Antwerpen" .
|
||||
}
|
||||
}
|
||||
WHERE {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?adminUnit <http://www.w3.org/ns/adms#identifier> ?id ;
|
||||
<http://www.w3.org/ns/org#hasPrimarySite> ?site .
|
||||
|
||||
?id <http://www.w3.org/2004/02/skos/core#notation> "KBO nummer" ;
|
||||
<https://data.vlaanderen.be/ns/generiek#gestructureerdeIdentificator>/<https://data.vlaanderen.be/ns/generiek#lokaleIdentificator> "0685516024" .
|
||||
|
||||
?site <https://data.vlaanderen.be/ns/organisatie#bestaatUit> ?boundAddress .
|
||||
?boundAddress <http://www.w3.org/ns/locn#adminUnitL2> ?province .
|
||||
|
||||
BIND( ?boundAddress AS ?addressUri )
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
DELETE {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?addressUri <http://www.w3.org/ns/locn#adminUnitL2> ?province .
|
||||
}
|
||||
}
|
||||
INSERT {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?addressUri <http://www.w3.org/ns/locn#adminUnitL2> "Antwerpen" .
|
||||
}
|
||||
}
|
||||
WHERE {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?adminUnit <http://www.w3.org/ns/adms#identifier> ?id ;
|
||||
<http://www.w3.org/ns/org#hasPrimarySite> ?site .
|
||||
|
||||
?id <http://www.w3.org/2004/02/skos/core#notation> "KBO nummer" ;
|
||||
<https://data.vlaanderen.be/ns/generiek#gestructureerdeIdentificator>/<https://data.vlaanderen.be/ns/generiek#lokaleIdentificator> "0809699184" .
|
||||
|
||||
?site <https://data.vlaanderen.be/ns/organisatie#bestaatUit> ?boundAddress .
|
||||
?boundAddress <http://www.w3.org/ns/locn#adminUnitL2> ?province .
|
||||
|
||||
BIND( ?boundAddress AS ?addressUri )
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
DELETE {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?addressUri <http://www.w3.org/ns/locn#adminUnitL2> ?province .
|
||||
}
|
||||
}
|
||||
INSERT {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?addressUri <http://www.w3.org/ns/locn#adminUnitL2> "Antwerpen" .
|
||||
}
|
||||
}
|
||||
WHERE {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?adminUnit <http://www.w3.org/ns/adms#identifier> ?id ;
|
||||
<http://www.w3.org/ns/org#hasPrimarySite> ?site .
|
||||
|
||||
?id <http://www.w3.org/2004/02/skos/core#notation> "KBO nummer" ;
|
||||
<https://data.vlaanderen.be/ns/generiek#gestructureerdeIdentificator>/<https://data.vlaanderen.be/ns/generiek#lokaleIdentificator> "0696665975" .
|
||||
|
||||
?site <https://data.vlaanderen.be/ns/organisatie#bestaatUit> ?boundAddress .
|
||||
?boundAddress <http://www.w3.org/ns/locn#adminUnitL2> ?province .
|
||||
|
||||
BIND( ?boundAddress AS ?addressUri )
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
DELETE {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?addressUri <http://www.w3.org/ns/locn#adminUnitL2> ?province .
|
||||
}
|
||||
}
|
||||
INSERT {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?addressUri <http://www.w3.org/ns/locn#adminUnitL2> "Limburg" .
|
||||
}
|
||||
}
|
||||
WHERE {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?adminUnit <http://www.w3.org/ns/adms#identifier> ?id ;
|
||||
<http://www.w3.org/ns/org#hasPrimarySite> ?site .
|
||||
|
||||
?id <http://www.w3.org/2004/02/skos/core#notation> "KBO nummer" ;
|
||||
<https://data.vlaanderen.be/ns/generiek#gestructureerdeIdentificator>/<https://data.vlaanderen.be/ns/generiek#lokaleIdentificator> "0689553994" .
|
||||
|
||||
?site <https://data.vlaanderen.be/ns/organisatie#bestaatUit> ?boundAddress .
|
||||
?boundAddress <http://www.w3.org/ns/locn#adminUnitL2> ?province .
|
||||
|
||||
BIND( ?boundAddress AS ?addressUri )
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
DELETE {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?addressUri <http://www.w3.org/ns/locn#adminUnitL2> ?province .
|
||||
}
|
||||
}
|
||||
INSERT {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?addressUri <http://www.w3.org/ns/locn#adminUnitL2> "West-Vlaanderen" .
|
||||
}
|
||||
}
|
||||
WHERE {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?adminUnit <http://www.w3.org/ns/adms#identifier> ?id ;
|
||||
<http://www.w3.org/ns/org#hasPrimarySite> ?site .
|
||||
|
||||
?id <http://www.w3.org/2004/02/skos/core#notation> "KBO nummer" ;
|
||||
<https://data.vlaanderen.be/ns/generiek#gestructureerdeIdentificator>/<https://data.vlaanderen.be/ns/generiek#lokaleIdentificator> "0686537789" .
|
||||
|
||||
?site <https://data.vlaanderen.be/ns/organisatie#bestaatUit> ?boundAddress .
|
||||
?boundAddress <http://www.w3.org/ns/locn#adminUnitL2> ?province .
|
||||
|
||||
BIND( ?boundAddress AS ?addressUri )
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
DELETE {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?addressUri <http://www.w3.org/ns/locn#adminUnitL2> ?province .
|
||||
}
|
||||
}
|
||||
INSERT {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?addressUri <http://www.w3.org/ns/locn#adminUnitL2> "Antwerpen" .
|
||||
}
|
||||
}
|
||||
WHERE {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?adminUnit <http://www.w3.org/ns/adms#identifier> ?id ;
|
||||
<http://www.w3.org/ns/org#hasPrimarySite> ?site .
|
||||
|
||||
?id <http://www.w3.org/2004/02/skos/core#notation> "KBO nummer" ;
|
||||
<https://data.vlaanderen.be/ns/generiek#gestructureerdeIdentificator>/<https://data.vlaanderen.be/ns/generiek#lokaleIdentificator> "0875376696" .
|
||||
|
||||
?site <https://data.vlaanderen.be/ns/organisatie#bestaatUit> ?boundAddress .
|
||||
?boundAddress <http://www.w3.org/ns/locn#adminUnitL2> ?province .
|
||||
|
||||
BIND( ?boundAddress AS ?addressUri )
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
DELETE {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?addressUri <http://www.w3.org/ns/locn#adminUnitL2> ?province .
|
||||
}
|
||||
}
|
||||
INSERT {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?addressUri <http://www.w3.org/ns/locn#adminUnitL2> "Limburg" .
|
||||
}
|
||||
}
|
||||
WHERE {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?adminUnit <http://www.w3.org/ns/adms#identifier> ?id ;
|
||||
<http://www.w3.org/ns/org#hasPrimarySite> ?site .
|
||||
|
||||
?id <http://www.w3.org/2004/02/skos/core#notation> "KBO nummer" ;
|
||||
<https://data.vlaanderen.be/ns/generiek#gestructureerdeIdentificator>/<https://data.vlaanderen.be/ns/generiek#lokaleIdentificator> "0267393663" .
|
||||
|
||||
?site <https://data.vlaanderen.be/ns/organisatie#bestaatUit> ?boundAddress .
|
||||
?boundAddress <http://www.w3.org/ns/locn#adminUnitL2> ?province .
|
||||
|
||||
BIND( ?boundAddress AS ?addressUri )
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
DELETE {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?addressUri <http://www.w3.org/ns/locn#adminUnitL2> ?province .
|
||||
}
|
||||
}
|
||||
INSERT {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?addressUri <http://www.w3.org/ns/locn#adminUnitL2> "Antwerpen" .
|
||||
}
|
||||
}
|
||||
WHERE {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?adminUnit <http://www.w3.org/ns/adms#identifier> ?id ;
|
||||
<http://www.w3.org/ns/org#hasPrimarySite> ?site .
|
||||
|
||||
?id <http://www.w3.org/2004/02/skos/core#notation> "KBO nummer" ;
|
||||
<https://data.vlaanderen.be/ns/generiek#gestructureerdeIdentificator>/<https://data.vlaanderen.be/ns/generiek#lokaleIdentificator> "0696899963" .
|
||||
|
||||
?site <https://data.vlaanderen.be/ns/organisatie#bestaatUit> ?boundAddress .
|
||||
?boundAddress <http://www.w3.org/ns/locn#adminUnitL2> ?province .
|
||||
|
||||
BIND( ?boundAddress AS ?addressUri )
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
DELETE {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?addressUri <http://www.w3.org/ns/locn#adminUnitL2> ?province .
|
||||
}
|
||||
}
|
||||
INSERT {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?addressUri <http://www.w3.org/ns/locn#adminUnitL2> "Antwerpen" .
|
||||
}
|
||||
}
|
||||
WHERE {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?adminUnit <http://www.w3.org/ns/adms#identifier> ?id ;
|
||||
<http://www.w3.org/ns/org#hasPrimarySite> ?site .
|
||||
|
||||
?id <http://www.w3.org/2004/02/skos/core#notation> "KBO nummer" ;
|
||||
<https://data.vlaanderen.be/ns/generiek#gestructureerdeIdentificator>/<https://data.vlaanderen.be/ns/generiek#lokaleIdentificator> "0694597697" .
|
||||
|
||||
?site <https://data.vlaanderen.be/ns/organisatie#bestaatUit> ?boundAddress .
|
||||
?boundAddress <http://www.w3.org/ns/locn#adminUnitL2> ?province .
|
||||
|
||||
BIND( ?boundAddress AS ?addressUri )
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
DELETE {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?addressUri <http://www.w3.org/ns/locn#adminUnitL2> ?province .
|
||||
}
|
||||
}
|
||||
INSERT {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?addressUri <http://www.w3.org/ns/locn#adminUnitL2> "West-Vlaanderen" .
|
||||
}
|
||||
}
|
||||
WHERE {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?adminUnit <http://www.w3.org/ns/adms#identifier> ?id ;
|
||||
<http://www.w3.org/ns/org#hasPrimarySite> ?site .
|
||||
|
||||
?id <http://www.w3.org/2004/02/skos/core#notation> "KBO nummer" ;
|
||||
<https://data.vlaanderen.be/ns/generiek#gestructureerdeIdentificator>/<https://data.vlaanderen.be/ns/generiek#lokaleIdentificator> "0711824305" .
|
||||
|
||||
?site <https://data.vlaanderen.be/ns/organisatie#bestaatUit> ?boundAddress .
|
||||
?boundAddress <http://www.w3.org/ns/locn#adminUnitL2> ?province .
|
||||
|
||||
BIND( ?boundAddress AS ?addressUri )
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
DELETE {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?addressUri <http://www.w3.org/ns/locn#adminUnitL2> ?province .
|
||||
}
|
||||
}
|
||||
INSERT {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?addressUri <http://www.w3.org/ns/locn#adminUnitL2> "West-Vlaanderen" .
|
||||
}
|
||||
}
|
||||
WHERE {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?adminUnit <http://www.w3.org/ns/adms#identifier> ?id ;
|
||||
<http://www.w3.org/ns/org#hasPrimarySite> ?site .
|
||||
|
||||
?id <http://www.w3.org/2004/02/skos/core#notation> "KBO nummer" ;
|
||||
<https://data.vlaanderen.be/ns/generiek#gestructureerdeIdentificator>/<https://data.vlaanderen.be/ns/generiek#lokaleIdentificator> "0684891363" .
|
||||
|
||||
?site <https://data.vlaanderen.be/ns/organisatie#bestaatUit> ?boundAddress .
|
||||
?boundAddress <http://www.w3.org/ns/locn#adminUnitL2> ?province .
|
||||
|
||||
BIND( ?boundAddress AS ?addressUri )
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
DELETE {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?addressUri <http://www.w3.org/ns/locn#adminUnitL2> ?province .
|
||||
}
|
||||
}
|
||||
INSERT {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?addressUri <http://www.w3.org/ns/locn#adminUnitL2> "Oost-Vlaanderen" .
|
||||
}
|
||||
}
|
||||
WHERE {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?adminUnit <http://www.w3.org/ns/adms#identifier> ?id ;
|
||||
<http://www.w3.org/ns/org#hasPrimarySite> ?site .
|
||||
|
||||
?id <http://www.w3.org/2004/02/skos/core#notation> "KBO nummer" ;
|
||||
<https://data.vlaanderen.be/ns/generiek#gestructureerdeIdentificator>/<https://data.vlaanderen.be/ns/generiek#lokaleIdentificator> "0212165922" .
|
||||
|
||||
?site <https://data.vlaanderen.be/ns/organisatie#bestaatUit> ?boundAddress .
|
||||
?boundAddress <http://www.w3.org/ns/locn#adminUnitL2> ?province .
|
||||
|
||||
BIND( ?boundAddress AS ?addressUri )
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
DELETE {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?addressUri <http://www.w3.org/ns/locn#adminUnitL2> ?province .
|
||||
}
|
||||
}
|
||||
INSERT {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?addressUri <http://www.w3.org/ns/locn#adminUnitL2> "Oost-Vlaanderen" .
|
||||
}
|
||||
}
|
||||
WHERE {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?adminUnit <http://www.w3.org/ns/adms#identifier> ?id ;
|
||||
<http://www.w3.org/ns/org#hasPrimarySite> ?site .
|
||||
|
||||
?id <http://www.w3.org/2004/02/skos/core#notation> "KBO nummer" ;
|
||||
<https://data.vlaanderen.be/ns/generiek#gestructureerdeIdentificator>/<https://data.vlaanderen.be/ns/generiek#lokaleIdentificator> "0698838775" .
|
||||
|
||||
?site <https://data.vlaanderen.be/ns/organisatie#bestaatUit> ?boundAddress .
|
||||
?boundAddress <http://www.w3.org/ns/locn#adminUnitL2> ?province .
|
||||
|
||||
BIND( ?boundAddress AS ?addressUri )
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
DELETE {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?addressUri <http://www.w3.org/ns/locn#adminUnitL2> ?province .
|
||||
}
|
||||
}
|
||||
INSERT {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?addressUri <http://www.w3.org/ns/locn#adminUnitL2> "Limburg" .
|
||||
}
|
||||
}
|
||||
WHERE {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?adminUnit <http://www.w3.org/ns/adms#identifier> ?id ;
|
||||
<http://www.w3.org/ns/org#hasPrimarySite> ?site .
|
||||
|
||||
?id <http://www.w3.org/2004/02/skos/core#notation> "KBO nummer" ;
|
||||
<https://data.vlaanderen.be/ns/generiek#gestructureerdeIdentificator>/<https://data.vlaanderen.be/ns/generiek#lokaleIdentificator> "0687742074" .
|
||||
|
||||
?site <https://data.vlaanderen.be/ns/organisatie#bestaatUit> ?boundAddress .
|
||||
?boundAddress <http://www.w3.org/ns/locn#adminUnitL2> ?province .
|
||||
|
||||
BIND( ?boundAddress AS ?addressUri )
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
DELETE {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?addressUri <http://www.w3.org/ns/locn#adminUnitL2> ?province .
|
||||
}
|
||||
}
|
||||
INSERT {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?addressUri <http://www.w3.org/ns/locn#adminUnitL2> "Vlaams-Brabant" .
|
||||
}
|
||||
}
|
||||
WHERE {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?adminUnit <http://www.w3.org/ns/adms#identifier> ?id ;
|
||||
<http://www.w3.org/ns/org#hasPrimarySite> ?site .
|
||||
|
||||
?id <http://www.w3.org/2004/02/skos/core#notation> "KBO nummer" ;
|
||||
<https://data.vlaanderen.be/ns/generiek#gestructureerdeIdentificator>/<https://data.vlaanderen.be/ns/generiek#lokaleIdentificator> "0712777279" .
|
||||
|
||||
?site <https://data.vlaanderen.be/ns/organisatie#bestaatUit> ?boundAddress .
|
||||
?boundAddress <http://www.w3.org/ns/locn#adminUnitL2> ?province .
|
||||
|
||||
BIND( ?boundAddress AS ?addressUri )
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
DELETE {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?addressUri <http://www.w3.org/ns/locn#adminUnitL2> ?province .
|
||||
}
|
||||
}
|
||||
INSERT {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?addressUri <http://www.w3.org/ns/locn#adminUnitL2> "Vlaams-Brabant" .
|
||||
}
|
||||
}
|
||||
WHERE {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?adminUnit <http://www.w3.org/ns/adms#identifier> ?id ;
|
||||
<http://www.w3.org/ns/org#hasPrimarySite> ?site .
|
||||
|
||||
?id <http://www.w3.org/2004/02/skos/core#notation> "KBO nummer" ;
|
||||
<https://data.vlaanderen.be/ns/generiek#gestructureerdeIdentificator>/<https://data.vlaanderen.be/ns/generiek#lokaleIdentificator> "0684493762" .
|
||||
|
||||
?site <https://data.vlaanderen.be/ns/organisatie#bestaatUit> ?boundAddress .
|
||||
?boundAddress <http://www.w3.org/ns/locn#adminUnitL2> ?province .
|
||||
|
||||
BIND( ?boundAddress AS ?addressUri )
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
DELETE {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?addressUri <http://www.w3.org/ns/locn#adminUnitL2> ?province .
|
||||
}
|
||||
}
|
||||
INSERT {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?addressUri <http://www.w3.org/ns/locn#adminUnitL2> "Limburg" .
|
||||
}
|
||||
}
|
||||
WHERE {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?adminUnit <http://www.w3.org/ns/adms#identifier> ?id ;
|
||||
<http://www.w3.org/ns/org#hasPrimarySite> ?site .
|
||||
|
||||
?id <http://www.w3.org/2004/02/skos/core#notation> "KBO nummer" ;
|
||||
<https://data.vlaanderen.be/ns/generiek#gestructureerdeIdentificator>/<https://data.vlaanderen.be/ns/generiek#lokaleIdentificator> "0688812935" .
|
||||
|
||||
?site <https://data.vlaanderen.be/ns/organisatie#bestaatUit> ?boundAddress .
|
||||
?boundAddress <http://www.w3.org/ns/locn#adminUnitL2> ?province .
|
||||
|
||||
BIND( ?boundAddress AS ?addressUri )
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
DELETE {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?addressUri <http://www.w3.org/ns/locn#adminUnitL2> ?province .
|
||||
}
|
||||
}
|
||||
INSERT {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?addressUri <http://www.w3.org/ns/locn#adminUnitL2> "West-Vlaanderen" .
|
||||
}
|
||||
}
|
||||
WHERE {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?adminUnit <http://www.w3.org/ns/adms#identifier> ?id ;
|
||||
<http://www.w3.org/ns/org#hasPrimarySite> ?site .
|
||||
|
||||
?id <http://www.w3.org/2004/02/skos/core#notation> "KBO nummer" ;
|
||||
<https://data.vlaanderen.be/ns/generiek#gestructureerdeIdentificator>/<https://data.vlaanderen.be/ns/generiek#lokaleIdentificator> "0735627214" .
|
||||
|
||||
?site <https://data.vlaanderen.be/ns/organisatie#bestaatUit> ?boundAddress .
|
||||
?boundAddress <http://www.w3.org/ns/locn#adminUnitL2> ?province .
|
||||
|
||||
BIND( ?boundAddress AS ?addressUri )
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
DELETE {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?addressUri <http://www.w3.org/ns/locn#adminUnitL2> ?province .
|
||||
}
|
||||
}
|
||||
INSERT {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?addressUri <http://www.w3.org/ns/locn#adminUnitL2> "West-Vlaanderen" .
|
||||
}
|
||||
}
|
||||
WHERE {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?adminUnit <http://www.w3.org/ns/adms#identifier> ?id ;
|
||||
<http://www.w3.org/ns/org#hasPrimarySite> ?site .
|
||||
|
||||
?id <http://www.w3.org/2004/02/skos/core#notation> "KBO nummer" ;
|
||||
<https://data.vlaanderen.be/ns/generiek#gestructureerdeIdentificator>/<https://data.vlaanderen.be/ns/generiek#lokaleIdentificator> "0630835639" .
|
||||
|
||||
?site <https://data.vlaanderen.be/ns/organisatie#bestaatUit> ?boundAddress .
|
||||
?boundAddress <http://www.w3.org/ns/locn#adminUnitL2> ?province .
|
||||
|
||||
BIND( ?boundAddress AS ?addressUri )
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
DELETE {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?addressUri <http://www.w3.org/ns/locn#adminUnitL2> ?province .
|
||||
}
|
||||
}
|
||||
INSERT {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?addressUri <http://www.w3.org/ns/locn#adminUnitL2> "Oost-Vlaanderen" .
|
||||
}
|
||||
}
|
||||
WHERE {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?adminUnit <http://www.w3.org/ns/adms#identifier> ?id ;
|
||||
<http://www.w3.org/ns/org#hasPrimarySite> ?site .
|
||||
|
||||
?id <http://www.w3.org/2004/02/skos/core#notation> "KBO nummer" ;
|
||||
<https://data.vlaanderen.be/ns/generiek#gestructureerdeIdentificator>/<https://data.vlaanderen.be/ns/generiek#lokaleIdentificator> "0871009916" .
|
||||
|
||||
?site <https://data.vlaanderen.be/ns/organisatie#bestaatUit> ?boundAddress .
|
||||
?boundAddress <http://www.w3.org/ns/locn#adminUnitL2> ?province .
|
||||
|
||||
BIND( ?boundAddress AS ?addressUri )
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
DELETE {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?addressUri <http://www.w3.org/ns/locn#adminUnitL2> ?province .
|
||||
}
|
||||
}
|
||||
INSERT {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?addressUri <http://www.w3.org/ns/locn#adminUnitL2> "Antwerpen" .
|
||||
}
|
||||
}
|
||||
WHERE {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?adminUnit <http://www.w3.org/ns/adms#identifier> ?id ;
|
||||
<http://www.w3.org/ns/org#hasPrimarySite> ?site .
|
||||
|
||||
?id <http://www.w3.org/2004/02/skos/core#notation> "KBO nummer" ;
|
||||
<https://data.vlaanderen.be/ns/generiek#gestructureerdeIdentificator>/<https://data.vlaanderen.be/ns/generiek#lokaleIdentificator> "0680439360" .
|
||||
|
||||
?site <https://data.vlaanderen.be/ns/organisatie#bestaatUit> ?boundAddress .
|
||||
?boundAddress <http://www.w3.org/ns/locn#adminUnitL2> ?province .
|
||||
|
||||
BIND( ?boundAddress AS ?addressUri )
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
DELETE {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?addressUri <http://www.w3.org/ns/locn#adminUnitL2> ?province .
|
||||
}
|
||||
}
|
||||
INSERT {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?addressUri <http://www.w3.org/ns/locn#adminUnitL2> "Oost-Vlaanderen" .
|
||||
}
|
||||
}
|
||||
WHERE {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?adminUnit <http://www.w3.org/ns/adms#identifier> ?id ;
|
||||
<http://www.w3.org/ns/org#hasPrimarySite> ?site .
|
||||
|
||||
?id <http://www.w3.org/2004/02/skos/core#notation> "KBO nummer" ;
|
||||
<https://data.vlaanderen.be/ns/generiek#gestructureerdeIdentificator>/<https://data.vlaanderen.be/ns/generiek#lokaleIdentificator> "0698817989" .
|
||||
|
||||
?site <https://data.vlaanderen.be/ns/organisatie#bestaatUit> ?boundAddress .
|
||||
?boundAddress <http://www.w3.org/ns/locn#adminUnitL2> ?province .
|
||||
|
||||
BIND( ?boundAddress AS ?addressUri )
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
DELETE {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?addressUri <http://www.w3.org/ns/locn#adminUnitL2> ?province .
|
||||
}
|
||||
}
|
||||
INSERT {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?addressUri <http://www.w3.org/ns/locn#adminUnitL2> "Vlaams-Brabant" .
|
||||
}
|
||||
}
|
||||
WHERE {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?adminUnit <http://www.w3.org/ns/adms#identifier> ?id ;
|
||||
<http://www.w3.org/ns/org#hasPrimarySite> ?site .
|
||||
|
||||
?id <http://www.w3.org/2004/02/skos/core#notation> "KBO nummer" ;
|
||||
<https://data.vlaanderen.be/ns/generiek#gestructureerdeIdentificator>/<https://data.vlaanderen.be/ns/generiek#lokaleIdentificator> "0697787118" .
|
||||
|
||||
?site <https://data.vlaanderen.be/ns/organisatie#bestaatUit> ?boundAddress .
|
||||
?boundAddress <http://www.w3.org/ns/locn#adminUnitL2> ?province .
|
||||
|
||||
BIND( ?boundAddress AS ?addressUri )
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
DELETE {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?addressUri <http://www.w3.org/ns/locn#adminUnitL2> ?province .
|
||||
}
|
||||
}
|
||||
INSERT {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?addressUri <http://www.w3.org/ns/locn#adminUnitL2> "Oost-Vlaanderen" .
|
||||
}
|
||||
}
|
||||
WHERE {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?adminUnit <http://www.w3.org/ns/adms#identifier> ?id ;
|
||||
<http://www.w3.org/ns/org#hasPrimarySite> ?site .
|
||||
|
||||
?id <http://www.w3.org/2004/02/skos/core#notation> "KBO nummer" ;
|
||||
<https://data.vlaanderen.be/ns/generiek#gestructureerdeIdentificator>/<https://data.vlaanderen.be/ns/generiek#lokaleIdentificator> "0729523736" .
|
||||
|
||||
?site <https://data.vlaanderen.be/ns/organisatie#bestaatUit> ?boundAddress .
|
||||
?boundAddress <http://www.w3.org/ns/locn#adminUnitL2> ?province .
|
||||
|
||||
BIND( ?boundAddress AS ?addressUri )
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
DELETE {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?addressUri <http://www.w3.org/ns/locn#adminUnitL2> ?province .
|
||||
}
|
||||
}
|
||||
INSERT {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?addressUri <http://www.w3.org/ns/locn#adminUnitL2> "Antwerpen" .
|
||||
}
|
||||
}
|
||||
WHERE {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?adminUnit <http://www.w3.org/ns/adms#identifier> ?id ;
|
||||
<http://www.w3.org/ns/org#hasPrimarySite> ?site .
|
||||
|
||||
?id <http://www.w3.org/2004/02/skos/core#notation> "KBO nummer" ;
|
||||
<https://data.vlaanderen.be/ns/generiek#gestructureerdeIdentificator>/<https://data.vlaanderen.be/ns/generiek#lokaleIdentificator> "0462239939" .
|
||||
|
||||
?site <https://data.vlaanderen.be/ns/organisatie#bestaatUit> ?boundAddress .
|
||||
?boundAddress <http://www.w3.org/ns/locn#adminUnitL2> ?province .
|
||||
|
||||
BIND( ?boundAddress AS ?addressUri )
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
DELETE {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?addressUri <http://www.w3.org/ns/locn#adminUnitL2> ?province .
|
||||
}
|
||||
}
|
||||
INSERT {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?addressUri <http://www.w3.org/ns/locn#adminUnitL2> "Oost-Vlaanderen" .
|
||||
}
|
||||
}
|
||||
WHERE {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?adminUnit <http://www.w3.org/ns/adms#identifier> ?id ;
|
||||
<http://www.w3.org/ns/org#hasPrimarySite> ?site .
|
||||
|
||||
?id <http://www.w3.org/2004/02/skos/core#notation> "KBO nummer" ;
|
||||
<https://data.vlaanderen.be/ns/generiek#gestructureerdeIdentificator>/<https://data.vlaanderen.be/ns/generiek#lokaleIdentificator> "0871206587" .
|
||||
|
||||
?site <https://data.vlaanderen.be/ns/organisatie#bestaatUit> ?boundAddress .
|
||||
?boundAddress <http://www.w3.org/ns/locn#adminUnitL2> ?province .
|
||||
|
||||
BIND( ?boundAddress AS ?addressUri )
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
DELETE {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?addressUri <http://www.w3.org/ns/locn#adminUnitL2> ?province .
|
||||
}
|
||||
}
|
||||
INSERT {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?addressUri <http://www.w3.org/ns/locn#adminUnitL2> "Oost-Vlaanderen" .
|
||||
}
|
||||
}
|
||||
WHERE {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?adminUnit <http://www.w3.org/ns/adms#identifier> ?id ;
|
||||
<http://www.w3.org/ns/org#hasPrimarySite> ?site .
|
||||
|
||||
?id <http://www.w3.org/2004/02/skos/core#notation> "KBO nummer" ;
|
||||
<https://data.vlaanderen.be/ns/generiek#gestructureerdeIdentificator>/<https://data.vlaanderen.be/ns/generiek#lokaleIdentificator> "0881291322" .
|
||||
|
||||
?site <https://data.vlaanderen.be/ns/organisatie#bestaatUit> ?boundAddress .
|
||||
?boundAddress <http://www.w3.org/ns/locn#adminUnitL2> ?province .
|
||||
|
||||
BIND( ?boundAddress AS ?addressUri )
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
DELETE {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?addressUri <http://www.w3.org/ns/locn#adminUnitL2> ?province .
|
||||
}
|
||||
}
|
||||
INSERT {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?addressUri <http://www.w3.org/ns/locn#adminUnitL2> "Limburg" .
|
||||
}
|
||||
}
|
||||
WHERE {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?adminUnit <http://www.w3.org/ns/adms#identifier> ?id ;
|
||||
<http://www.w3.org/ns/org#hasPrimarySite> ?site .
|
||||
|
||||
?id <http://www.w3.org/2004/02/skos/core#notation> "KBO nummer" ;
|
||||
<https://data.vlaanderen.be/ns/generiek#gestructureerdeIdentificator>/<https://data.vlaanderen.be/ns/generiek#lokaleIdentificator> "0242469910" .
|
||||
|
||||
?site <https://data.vlaanderen.be/ns/organisatie#bestaatUit> ?boundAddress .
|
||||
?boundAddress <http://www.w3.org/ns/locn#adminUnitL2> ?province .
|
||||
|
||||
BIND( ?boundAddress AS ?addressUri )
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
DELETE {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?addressUri <http://www.w3.org/ns/locn#adminUnitL2> ?province .
|
||||
}
|
||||
}
|
||||
INSERT {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?addressUri <http://www.w3.org/ns/locn#adminUnitL2> "West-Vlaanderen" .
|
||||
}
|
||||
}
|
||||
WHERE {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?adminUnit <http://www.w3.org/ns/adms#identifier> ?id ;
|
||||
<http://www.w3.org/ns/org#hasPrimarySite> ?site .
|
||||
|
||||
?id <http://www.w3.org/2004/02/skos/core#notation> "KBO nummer" ;
|
||||
<https://data.vlaanderen.be/ns/generiek#gestructureerdeIdentificator>/<https://data.vlaanderen.be/ns/generiek#lokaleIdentificator> "0266559859" .
|
||||
|
||||
?site <https://data.vlaanderen.be/ns/organisatie#bestaatUit> ?boundAddress .
|
||||
?boundAddress <http://www.w3.org/ns/locn#adminUnitL2> ?province .
|
||||
|
||||
BIND( ?boundAddress AS ?addressUri )
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
DELETE {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?addressUri <http://www.w3.org/ns/locn#adminUnitL2> ?province .
|
||||
}
|
||||
}
|
||||
INSERT {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?addressUri <http://www.w3.org/ns/locn#adminUnitL2> "Vlaams-Brabant" .
|
||||
}
|
||||
}
|
||||
WHERE {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?adminUnit <http://www.w3.org/ns/adms#identifier> ?id ;
|
||||
<http://www.w3.org/ns/org#hasPrimarySite> ?site .
|
||||
|
||||
?id <http://www.w3.org/2004/02/skos/core#notation> "KBO nummer" ;
|
||||
<https://data.vlaanderen.be/ns/generiek#gestructureerdeIdentificator>/<https://data.vlaanderen.be/ns/generiek#lokaleIdentificator> "0473908049" .
|
||||
|
||||
?site <https://data.vlaanderen.be/ns/organisatie#bestaatUit> ?boundAddress .
|
||||
?boundAddress <http://www.w3.org/ns/locn#adminUnitL2> ?province .
|
||||
|
||||
BIND( ?boundAddress AS ?addressUri )
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
DELETE {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?addressUri <http://www.w3.org/ns/locn#adminUnitL2> ?province .
|
||||
}
|
||||
}
|
||||
INSERT {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?addressUri <http://www.w3.org/ns/locn#adminUnitL2> "West-Vlaanderen" .
|
||||
}
|
||||
}
|
||||
WHERE {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?adminUnit <http://www.w3.org/ns/adms#identifier> ?id ;
|
||||
<http://www.w3.org/ns/org#hasPrimarySite> ?site .
|
||||
|
||||
?id <http://www.w3.org/2004/02/skos/core#notation> "KBO nummer" ;
|
||||
<https://data.vlaanderen.be/ns/generiek#gestructureerdeIdentificator>/<https://data.vlaanderen.be/ns/generiek#lokaleIdentificator> "0262925527" .
|
||||
|
||||
?site <https://data.vlaanderen.be/ns/organisatie#bestaatUit> ?boundAddress .
|
||||
?boundAddress <http://www.w3.org/ns/locn#adminUnitL2> ?province .
|
||||
|
||||
BIND( ?boundAddress AS ?addressUri )
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
DELETE {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?addressUri <http://www.w3.org/ns/locn#adminUnitL2> ?province .
|
||||
}
|
||||
}
|
||||
INSERT {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?addressUri <http://www.w3.org/ns/locn#adminUnitL2> "West-Vlaanderen" .
|
||||
}
|
||||
}
|
||||
WHERE {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?adminUnit <http://www.w3.org/ns/adms#identifier> ?id ;
|
||||
<http://www.w3.org/ns/org#hasPrimarySite> ?site .
|
||||
|
||||
?id <http://www.w3.org/2004/02/skos/core#notation> "KBO nummer" ;
|
||||
<https://data.vlaanderen.be/ns/generiek#gestructureerdeIdentificator>/<https://data.vlaanderen.be/ns/generiek#lokaleIdentificator> "0505931808" .
|
||||
|
||||
?site <https://data.vlaanderen.be/ns/organisatie#bestaatUit> ?boundAddress .
|
||||
?boundAddress <http://www.w3.org/ns/locn#adminUnitL2> ?province .
|
||||
|
||||
BIND( ?boundAddress AS ?addressUri )
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
DELETE {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?addressUri <http://www.w3.org/ns/locn#adminUnitL2> ?province .
|
||||
}
|
||||
}
|
||||
INSERT {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?addressUri <http://www.w3.org/ns/locn#adminUnitL2> "Oost-Vlaanderen" .
|
||||
}
|
||||
}
|
||||
WHERE {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?adminUnit <http://www.w3.org/ns/adms#identifier> ?id ;
|
||||
<http://www.w3.org/ns/org#hasPrimarySite> ?site .
|
||||
|
||||
?id <http://www.w3.org/2004/02/skos/core#notation> "KBO nummer" ;
|
||||
<https://data.vlaanderen.be/ns/generiek#gestructureerdeIdentificator>/<https://data.vlaanderen.be/ns/generiek#lokaleIdentificator> "0885714720" .
|
||||
|
||||
?site <https://data.vlaanderen.be/ns/organisatie#bestaatUit> ?boundAddress .
|
||||
?boundAddress <http://www.w3.org/ns/locn#adminUnitL2> ?province .
|
||||
|
||||
BIND( ?boundAddress AS ?addressUri )
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
DELETE {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?addressUri <http://www.w3.org/ns/locn#adminUnitL2> ?province .
|
||||
}
|
||||
}
|
||||
INSERT {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?addressUri <http://www.w3.org/ns/locn#adminUnitL2> "Antwerpen" .
|
||||
}
|
||||
}
|
||||
WHERE {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?adminUnit <http://www.w3.org/ns/adms#identifier> ?id ;
|
||||
<http://www.w3.org/ns/org#hasPrimarySite> ?site .
|
||||
|
||||
?id <http://www.w3.org/2004/02/skos/core#notation> "KBO nummer" ;
|
||||
<https://data.vlaanderen.be/ns/generiek#gestructureerdeIdentificator>/<https://data.vlaanderen.be/ns/generiek#lokaleIdentificator> "0862382656" .
|
||||
|
||||
?site <https://data.vlaanderen.be/ns/organisatie#bestaatUit> ?boundAddress .
|
||||
?boundAddress <http://www.w3.org/ns/locn#adminUnitL2> ?province .
|
||||
|
||||
BIND( ?boundAddress AS ?addressUri )
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
DELETE {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?addressUri <http://www.w3.org/ns/locn#adminUnitL2> ?province .
|
||||
}
|
||||
}
|
||||
INSERT {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?addressUri <http://www.w3.org/ns/locn#adminUnitL2> "Oost-Vlaanderen" .
|
||||
}
|
||||
}
|
||||
WHERE {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?adminUnit <http://www.w3.org/ns/adms#identifier> ?id ;
|
||||
<http://www.w3.org/ns/org#hasPrimarySite> ?site .
|
||||
|
||||
?id <http://www.w3.org/2004/02/skos/core#notation> "KBO nummer" ;
|
||||
<https://data.vlaanderen.be/ns/generiek#gestructureerdeIdentificator>/<https://data.vlaanderen.be/ns/generiek#lokaleIdentificator> "0666615870" .
|
||||
|
||||
?site <https://data.vlaanderen.be/ns/organisatie#bestaatUit> ?boundAddress .
|
||||
?boundAddress <http://www.w3.org/ns/locn#adminUnitL2> ?province .
|
||||
|
||||
BIND( ?boundAddress AS ?addressUri )
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
DELETE {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?addressUri <http://www.w3.org/ns/locn#adminUnitL2> ?province .
|
||||
}
|
||||
}
|
||||
INSERT {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?addressUri <http://www.w3.org/ns/locn#adminUnitL2> "West-Vlaanderen" .
|
||||
}
|
||||
}
|
||||
WHERE {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?adminUnit <http://www.w3.org/ns/adms#identifier> ?id ;
|
||||
<http://www.w3.org/ns/org#hasPrimarySite> ?site .
|
||||
|
||||
?id <http://www.w3.org/2004/02/skos/core#notation> "KBO nummer" ;
|
||||
<https://data.vlaanderen.be/ns/generiek#gestructureerdeIdentificator>/<https://data.vlaanderen.be/ns/generiek#lokaleIdentificator> "0262926319" .
|
||||
|
||||
?site <https://data.vlaanderen.be/ns/organisatie#bestaatUit> ?boundAddress .
|
||||
?boundAddress <http://www.w3.org/ns/locn#adminUnitL2> ?province .
|
||||
|
||||
BIND( ?boundAddress AS ?addressUri )
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
DELETE {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?addressUri <http://www.w3.org/ns/locn#adminUnitL2> ?province .
|
||||
}
|
||||
}
|
||||
INSERT {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?addressUri <http://www.w3.org/ns/locn#adminUnitL2> "West-Vlaanderen" .
|
||||
}
|
||||
}
|
||||
WHERE {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?adminUnit <http://www.w3.org/ns/adms#identifier> ?id ;
|
||||
<http://www.w3.org/ns/org#hasPrimarySite> ?site .
|
||||
|
||||
?id <http://www.w3.org/2004/02/skos/core#notation> "KBO nummer" ;
|
||||
<https://data.vlaanderen.be/ns/generiek#gestructureerdeIdentificator>/<https://data.vlaanderen.be/ns/generiek#lokaleIdentificator> "0537951706" .
|
||||
|
||||
?site <https://data.vlaanderen.be/ns/organisatie#bestaatUit> ?boundAddress .
|
||||
?boundAddress <http://www.w3.org/ns/locn#adminUnitL2> ?province .
|
||||
|
||||
BIND( ?boundAddress AS ?addressUri )
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
DELETE {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?addressUri <http://www.w3.org/ns/locn#adminUnitL2> ?province .
|
||||
}
|
||||
}
|
||||
INSERT {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?addressUri <http://www.w3.org/ns/locn#adminUnitL2> "Oost-Vlaanderen" .
|
||||
}
|
||||
}
|
||||
WHERE {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?adminUnit <http://www.w3.org/ns/adms#identifier> ?id ;
|
||||
<http://www.w3.org/ns/org#hasPrimarySite> ?site .
|
||||
|
||||
?id <http://www.w3.org/2004/02/skos/core#notation> "KBO nummer" ;
|
||||
<https://data.vlaanderen.be/ns/generiek#gestructureerdeIdentificator>/<https://data.vlaanderen.be/ns/generiek#lokaleIdentificator> "0262926616" .
|
||||
|
||||
?site <https://data.vlaanderen.be/ns/organisatie#bestaatUit> ?boundAddress .
|
||||
?boundAddress <http://www.w3.org/ns/locn#adminUnitL2> ?province .
|
||||
|
||||
BIND( ?boundAddress AS ?addressUri )
|
||||
}
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user