Compare commits
392 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3dbba4b176 | ||
|
|
107efbcf09 | ||
|
|
8db80bf04f | ||
|
|
4e8d80935f | ||
|
|
b89bd61fa6 | ||
|
|
49a0c45be5 | ||
|
|
b1e737265f | ||
|
|
07d076cfe7 | ||
|
|
96160b5665 | ||
|
|
d07c9156f5 | ||
|
|
d46472a090 | ||
|
|
223e30f2f5 | ||
|
|
1149b9a29c | ||
|
|
417922e556 | ||
|
|
ed08b7e117 | ||
|
|
8f1bbb7047 | ||
|
|
b9590d3289 | ||
|
|
b51ebbf8c5 | ||
|
|
832b8ed57c | ||
|
|
7e7b51cf0a | ||
|
|
91abe61cfc | ||
|
|
0c39f4a0be | ||
|
|
8e7e031576 | ||
|
|
2114f1531e | ||
|
|
d67440eac0 | ||
|
|
48f982864f | ||
|
|
1e7de4a9a8 | ||
|
|
48e0c3b3ea | ||
|
|
8e2dc898f5 | ||
|
|
de5bb3e392 | ||
|
|
6ef9690647 | ||
|
|
b6bdd5b067 | ||
|
|
97263fe7ae | ||
|
|
2ef1d8ab7b | ||
|
|
3e7d92624c | ||
|
|
9dffe4b223 | ||
|
|
6f2db80f50 | ||
|
|
8308644e82 | ||
|
|
7ac0394d2f | ||
|
|
215deda183 | ||
|
|
729bee7f14 | ||
|
|
8146686b48 | ||
|
|
8d133fd1c9 | ||
|
|
101618c156 | ||
|
|
b51293ca3a | ||
|
|
e1eca4b185 | ||
|
|
1c46d49976 | ||
|
|
68cbd39c9d | ||
|
|
4982224a78 | ||
|
|
cbf320711d | ||
|
|
6dfb0a656f | ||
|
|
387ef1eeea | ||
|
|
5a3ae13eb0 | ||
|
|
57dca52171 | ||
|
|
e7e76c187b | ||
|
|
6a85ec7c96 | ||
|
|
b272e1500c | ||
|
|
7c2a54264a | ||
|
|
74327cc371 | ||
|
|
bfb28bb698 | ||
|
|
cc8125cb14 | ||
|
|
329a63a0b9 | ||
|
|
4891b6829d | ||
|
|
eef379f7ed | ||
|
|
ea2d25d177 | ||
|
|
8c49134011 | ||
|
|
d203077364 | ||
|
|
eee9f18561 | ||
|
|
a8681a02f3 | ||
|
|
edbba1eeaa | ||
|
|
0c9355c94f | ||
|
|
b6a42c66cf | ||
|
|
96b36d2cf6 | ||
|
|
19a0804b56 | ||
|
|
a4684811df | ||
|
|
dc18662517 | ||
|
|
c6ba52a6bc | ||
|
|
ee1c92b5fe | ||
|
|
32b6520bfa | ||
|
|
0e9483b4f8 | ||
|
|
b65e0cbeaa | ||
|
|
fbf8a4e2dc | ||
|
|
1bff031596 | ||
|
|
b2deb421bc | ||
|
|
e078ae48a7 | ||
|
|
e2479f626a | ||
|
|
df8512d8f9 | ||
|
|
ed0863c0bf | ||
|
|
4131395159 | ||
|
|
325ebe991c | ||
|
|
179ba7b315 | ||
|
|
714fda3dc8 | ||
|
|
b31d6c65e6 | ||
|
|
0be27e1ef2 | ||
|
|
c77f1e9139 | ||
|
|
8a76be40e8 | ||
|
|
3dffca6623 | ||
|
|
f6fe8ac87d | ||
|
|
7defbf9009 | ||
|
|
5f1bfe96c7 | ||
|
|
d2ec188373 | ||
|
|
9515aec9ad | ||
|
|
d4cd0d5cbd | ||
|
|
6036b030c1 | ||
|
|
d3420cf935 | ||
|
|
f2a65697db | ||
|
|
f279c1dba5 | ||
|
|
d0d3440338 | ||
|
|
6c0619d45c | ||
|
|
8b8b192bbd | ||
|
|
bde4180168 | ||
|
|
f04ebf5723 | ||
|
|
addd4304f6 | ||
|
|
ba5bdac6cb | ||
|
|
366aad9fe5 | ||
|
|
01c5c7e7b3 | ||
|
|
73a494cd73 | ||
|
|
73e6c2c60c | ||
|
|
6cc9acd4cd | ||
|
|
273c3d1f10 | ||
|
|
464da76876 | ||
|
|
eb7d8949cd | ||
|
|
34244b699b | ||
|
|
0f4173fd1a | ||
|
|
5dfa7e4676 | ||
|
|
927e370aa6 | ||
|
|
2f06135cf9 | ||
|
|
c6b74f6a1c | ||
|
|
706b7fa525 | ||
|
|
8ca23d5515 | ||
|
|
e712fa8fc8 | ||
|
|
225e31d845 | ||
|
|
a26abc8523 | ||
|
|
9591cd3603 | ||
|
|
85c307216c | ||
|
|
e9327a4357 | ||
|
|
539376c47c | ||
|
|
57ef47cef9 | ||
|
|
12265b7eee | ||
|
|
a019ee1025 | ||
|
|
50d9db571b | ||
|
|
f41aaae912 | ||
|
|
c0d23e6178 | ||
|
|
67a8e9c6df | ||
|
|
b6ac54df46 | ||
|
|
0497b23fac | ||
|
|
0d87feb119 | ||
|
|
725f608a3b | ||
|
|
a3d1ec1b81 | ||
|
|
285bb6f6cb | ||
|
|
9dde9bf2b9 | ||
|
|
2271ea0395 | ||
|
|
4b4f11c1c7 | ||
|
|
ec6f1700a9 | ||
|
|
262fe89248 | ||
|
|
d5c8f699b1 | ||
|
|
d017d1b0e3 | ||
|
|
2757b082b8 | ||
|
|
1f76fc0fe6 | ||
|
|
ce2558ad68 | ||
|
|
b9fb9d8a63 | ||
|
|
bf6b568aa9 | ||
|
|
84b657cd84 | ||
|
|
5deec6a735 | ||
|
|
adb6864321 | ||
|
|
cbff03275a | ||
|
|
d246555c8a | ||
|
|
f9c0ef7072 | ||
|
|
9e75eaecb4 | ||
|
|
a3370a9385 | ||
|
|
0a883702fc | ||
|
|
8a64229f69 | ||
|
|
6cae455d46 | ||
|
|
b97b545add | ||
|
|
2c729ddee3 | ||
|
|
a210f830c2 | ||
|
|
6fc2281ea0 | ||
|
|
b07885b14c | ||
|
|
74d86dd25c | ||
|
|
ab8cef99d0 | ||
|
|
e8a2d29abc | ||
|
|
846b523045 | ||
|
|
93298b2c34 | ||
|
|
0dae17db17 | ||
|
|
be4d2c04b0 | ||
|
|
15972b5125 | ||
|
|
0a5e5ac9e6 | ||
|
|
68afdad2c4 | ||
|
|
c6345a9c2f | ||
|
|
c3365c7b80 | ||
|
|
59b0e6ae5c | ||
|
|
df30c9c080 | ||
|
|
3747f97a8f | ||
|
|
bc3cd35f8f | ||
|
|
3ab27e5d36 | ||
|
|
1d2d69594b | ||
|
|
50728e0766 | ||
|
|
88f49a1f08 | ||
|
|
175ecef9fa | ||
|
|
395707593d | ||
|
|
853b2ddd85 | ||
|
|
ee8dbbe72d | ||
|
|
9a71662b49 | ||
|
|
c72093ad4b | ||
|
|
72a0d782a6 | ||
|
|
a7d77241d0 | ||
|
|
920f78e51d | ||
|
|
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 | ||
|
|
cfd1a445de | ||
|
|
c570ab994e | ||
|
|
c9ba00fc23 | ||
|
|
c993a681d9 | ||
|
|
51e41f1eb1 | ||
|
|
090a69fd3f | ||
|
|
b60004fcf2 | ||
|
|
945faf8761 | ||
|
|
1f7a754eb9 | ||
|
|
93a86372e0 | ||
|
|
fd5844c319 | ||
|
|
dc62d6616b | ||
|
|
ccc06b1970 | ||
|
|
432d866b7b | ||
|
|
04f01f8302 | ||
|
|
01a374f98f | ||
|
|
34ec459382 | ||
|
|
7afee31178 | ||
|
|
1518c71334 | ||
|
|
c52ff23566 | ||
|
|
7964fd7879 | ||
|
|
86c2917396 | ||
|
|
d66b0b5eec | ||
|
|
6222aadf35 | ||
|
|
90f2cc26c5 | ||
|
|
fd98afc05b | ||
|
|
df4c187c2a | ||
|
|
08aae7881d | ||
|
|
2423b02840 | ||
|
|
0b18c44e2b | ||
|
|
4ea35853f1 | ||
|
|
04b25fea7d | ||
|
|
ae5c84d1d4 | ||
|
|
d40b2837b9 | ||
|
|
7926b078e3 | ||
|
|
eddf8f8b67 | ||
|
|
00a6144c16 | ||
|
|
d687463c0d | ||
|
|
74442fcdf6 | ||
|
|
40d7c72b59 | ||
|
|
44cbb222cc | ||
|
|
08b39e36c3 | ||
|
|
95953c7988 | ||
|
|
64f78722d9 | ||
|
|
2ed45e3a5e | ||
|
|
70e09cf995 | ||
|
|
e3ec21eb71 | ||
|
|
7da8ebb695 | ||
|
|
494caa8c59 | ||
|
|
13d8154a9a | ||
|
|
6cc953e4ed | ||
|
|
67efdf47aa | ||
|
|
fcf5d3fc59 | ||
|
|
15248b5e4b | ||
|
|
8c7e75acc8 | ||
|
|
9291024baa | ||
|
|
d202be0be8 | ||
|
|
ee1d6078ab | ||
|
|
fd6326c605 | ||
|
|
0502535e13 | ||
|
|
d617154e5d | ||
|
|
68677ead2a | ||
|
|
3102f48998 | ||
|
|
d5da714e12 | ||
|
|
c373a3708b | ||
|
|
7ae1793866 | ||
|
|
0e5ac9a59f | ||
|
|
90cc3a0888 | ||
|
|
86c8fd4b56 | ||
|
|
7050629e0c | ||
|
|
4b0f0c1df2 | ||
|
|
9b4b9a0a6d | ||
|
|
7902a1acad | ||
|
|
fef667fd9f | ||
|
|
c7e58abdc3 | ||
|
|
2c6d73d389 | ||
|
|
07b36fb193 | ||
|
|
633a44a85f |
1
.gitignore
vendored
1
.gitignore
vendored
@@ -20,6 +20,7 @@ docker-compose.override.yml
|
||||
|
||||
/config/migrations/private-data/*
|
||||
/config/migrations/local/*
|
||||
/config/migrations-triggering-indexing/local/*
|
||||
|
||||
/config/proxy/nginx.htpasswd
|
||||
|
||||
|
||||
574
CHANGELOG.md
574
CHANGELOG.md
@@ -1,20 +1,586 @@
|
||||
# Changelog
|
||||
## 1.37.1 (2025-11-04)
|
||||
### Bakend
|
||||
- Include v1.35.2 hotfix to the 1.37.x version. Already deployed so no deploy instructions
|
||||
## 1.37.0 (2025-10-24)
|
||||
### Backend
|
||||
- Add municipalities and werkingsgebieden in the area of Brussel [OP-3669]
|
||||
- Updated mu-search configuration with source [OP-3670]
|
||||
|
||||
### Deploy notes
|
||||
```
|
||||
drc restart migrations-triggering-indexing; drc logs -ft --tail=200 migrations-triggering-indexing
|
||||
drc up -d frontend
|
||||
scripts/reset-elastic.sh
|
||||
```
|
||||
|
||||
## 1.36.0 (2025-10-03)
|
||||
### Dashboard
|
||||
- Enable ACM/IDM for the dashboard [OP-3674]
|
||||
|
||||
#### QA
|
||||
Configure the environment variables for the QA ACM/IDM environment:
|
||||
|
||||
```yml
|
||||
frontend-dashboard:
|
||||
environment:
|
||||
EMBER_ACMIDM_CLIENT_ID: "03382bf4-4886-4fb6-8602-945ad3080a7a"
|
||||
EMBER_ACMIDM_BASE_URL: "https://authenticatie-ti.vlaanderen.be/op/v1/auth"
|
||||
EMBER_ACMIDM_REDIRECT_URL: "https://dashboard.organisaties.abb.lblod.info/authorization/callback"
|
||||
EMBER_ACMIDM_LOGOUT_URL: "https://authenticatie-ti.vlaanderen.be/op/v1/logout"
|
||||
EMBER_ACMIDM_SCOPE: "openid vo profile abb_organisatieportaal"
|
||||
|
||||
login-dashboard:
|
||||
environment:
|
||||
MU_APPLICATION_AUTH_DISCOVERY_URL: "https://authenticatie-ti.vlaanderen.be/op"
|
||||
MU_APPLICATION_AUTH_CLIENT_ID: "03382bf4-4886-4fb6-8602-945ad3080a7a"
|
||||
MU_APPLICATION_AUTH_REDIRECT_URI: "https://dashboard.organisaties.abb.lblod.info/authorization/callback"
|
||||
MU_APPLICATION_AUTH_CLIENT_SECRET: "snip" # see ticket for secret
|
||||
|
||||
```
|
||||
|
||||
Link the new domain name to QA (and remove from dev)
|
||||
|
||||
#### PROD
|
||||
Configure the environment variables for the PROD ACM/IDM environment once the values are known.
|
||||
|
||||
Link the new domain name to PROD + DNS config to the server
|
||||
|
||||
#### CLI
|
||||
```
|
||||
drc restart migrations
|
||||
drc restart dispatcher db
|
||||
drc up -d --remove-orphans
|
||||
```
|
||||
|
||||
### Frontend
|
||||
- Bump to [v1.34.1](https://github.com/lblod/frontend-organization-portal/releases/tag/v1.34.1) [OP-3638]
|
||||
- Remove province for addresses in the Brussels area [OP-3638] & [OP-3648]
|
||||
|
||||
### Deploy notes
|
||||
```
|
||||
drc pull frontend; drc up -d frontend
|
||||
drc restart migrations-triggering-indexing; drc logs -ft --tail=200 migrations-triggering-indexing
|
||||
```
|
||||
|
||||
## v1.35.2 (2025-11-04)
|
||||
### Backend
|
||||
- Fix camel case name of municipality Heist-op-den-Berg in addresses [OP-3694]
|
||||
### Deploy notes
|
||||
```
|
||||
drc restart migrations-triggering-indexing
|
||||
```
|
||||
|
||||
## v1.35.1 (2025-09-15)
|
||||
### Backend
|
||||
- Produce memberships and their roles in organizations and public producers [OP-3658] & [OP-3661]
|
||||
### Deploy notes
|
||||
```
|
||||
drc restart delta-producer-publication-graph-maintainer
|
||||
```
|
||||
|
||||
## v1.35.0 (2025-08-04)
|
||||
### Frontend
|
||||
- Bump to [v1.34.0](https://github.com/lblod/frontend-organization-portal/releases/tag/v1.34.0)
|
||||
### Backend
|
||||
- Add a service to manage organisation's their scope of operation [OP-3205]
|
||||
- datamodel: Allow a location to be within multiple other locations [OP-3205]
|
||||
- datafix: set scope of operation for worship administrative units [OP-3626]
|
||||
- Clean addresses linked to both sites and contact points of mandatarissen and addresses that are in the wrong graph (admin unit graph but linked to a contact point in the worship graph) [DL-6701]
|
||||
- datafix: cleanup of general memberships if specific ones exist [OP-3640]
|
||||
- datafix: cleanup of duplicate memberships [OP-3634]
|
||||
- Fix KBO organizations' date formats [OP-3560]
|
||||
|
||||
|
||||
### Deploy notes
|
||||
```
|
||||
drc pull scope-of-operation; drc up -d scope-of-operation
|
||||
drc restart db resource dispatcher
|
||||
drc pull frontend; drc up -d frontend
|
||||
drc restart migrations; drc logs -ft --tail=200 migrations
|
||||
drc up -d kbo-data-sync
|
||||
```
|
||||
|
||||
The labels for new location resources created when setting the scope of operation for worship services are not necessarily alphabetically sorted. To correct this run the `correct-location-labels` project script using [mu-cli](https://github.com/mu-semtech/mu-cli) and restart the migrations service once more to execute the generated local migrations.
|
||||
|
||||
```
|
||||
mu script project-scripts correct-location-labels
|
||||
drc restart migrations; drc logs -ft --tail=200 migrations
|
||||
```
|
||||
|
||||
## v1.34.0 (2025-07-11)
|
||||
### Frontend
|
||||
- Bump to version [v1.33.0](https://github.com/lblod/frontend-organization-portal/releases/tag/v1.33.0)
|
||||
### Backend
|
||||
- Add Brussels Hoofdstedelijk Gewest as province and location, update province of addresses in Brussel's area, update resource config to add `skos:note` on organizations [OP-3624]
|
||||
- Add Brussel as a municipality [OP-3628]
|
||||
- Revert Brussel as province and municipality and update back province of addresses in Brussel's area [OP-3637]
|
||||
- Bump delta-notifier service to most recent version [OP-3190]
|
||||
- Add URI to resource's organization responses
|
||||
- Fix query for organizations report [OP-3636]
|
||||
- Bump report-generation-service to most recent version
|
||||
- Write migration to harmonize date formats of change events [OP-3559]
|
||||
### Deploy notes
|
||||
```
|
||||
drc pull deltanotifier; drc up -d deltanotifier
|
||||
drc restart migrations-triggering-indexing resource
|
||||
drc pull frontend; drc up -d frontend
|
||||
drc pull report-generation; drc up -d report-generation
|
||||
drc restart migrations; drc logs -ft --tail=200 migrations
|
||||
```
|
||||
|
||||
## v1.33.3 (2025-07-04)
|
||||
### Backend
|
||||
- datafix: re-add Havenbedrijf Antwerpen as an AGB [OP-3639]
|
||||
### Deploy notes
|
||||
```
|
||||
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.33.2 (2025-06-20)
|
||||
### Backend
|
||||
- datafix: correct name for locations whose municipalities kept their URI in the 2025 mergers [OP-3627]
|
||||
### Deploy notes
|
||||
```
|
||||
drc restart migrations-triggering-indexing && drc logs -ft --tail=200
|
||||
```
|
||||
|
||||
## v1.33.1 (2025-06-16)
|
||||
### Backend
|
||||
- Added Vlaams Parlement as bestuurseenheid. [DL-6686]
|
||||
### Deploy Notes
|
||||
```
|
||||
drc restart migrations;
|
||||
drc exec delta-producer-background-jobs-initiator curl -X POST http://localhost/public/healing-jobs
|
||||
```
|
||||
|
||||
## v1.33.0 (2025-06-05)
|
||||
### Frontend
|
||||
- Bump to version [v1.32.0](https://github.com/lblod/frontend-organization-portal/releases/tag/v1.32.0)
|
||||
### Backend
|
||||
- datafix: move memberships involving provinces and municipalities to shared graph [OP-3619]
|
||||
### Deploy notes
|
||||
```
|
||||
drc restart migrations; drc logs -ft --tail=200 migrations
|
||||
drc exec db-cleanup curl -X POST "http://localhost/cleanup"
|
||||
drc pull frontend; drc up -d frontend
|
||||
```
|
||||
|
||||
## v1.32.1 (2025-06-02)
|
||||
### Backend
|
||||
- Added Kabinet Crevits as bestuurseenheid. [DL-6655]
|
||||
### Deploy Notes
|
||||
```
|
||||
drc restart migrations;
|
||||
drc exec delta-producer-background-jobs-initiator curl -X POST http://localhost/public/healing-jobs
|
||||
```
|
||||
|
||||
## v1.32.0 (2025-05-23)
|
||||
### Frontend
|
||||
- Bump to version [v1.31.0](https://github.com/lblod/frontend-organization-portal/releases/tag/v1.31.0)
|
||||
### Backend
|
||||
- Fix KBO statuses not being displayed [OP-3584]
|
||||
- datafix: update NIS2019 end dates and link additional NIS2025 to werkingsgebieden [part of OP-3566]
|
||||
- datafix: correct date of change event of ckb olen [OP-3594]
|
||||
- datafix: move memberships from shared to administrative unit graph
|
||||
- datafix: cleanup werkingsgbieden data [OP-3566]
|
||||
+ Move werkingsgebieden to public graph
|
||||
+ Link district werkingsgebieden to Antwerp municipality werkingsgebied
|
||||
+ Add missing werkingsgebied for Borsbeek district
|
||||
- Write migration to extract from existing primary sites the province URI [OP-3597]
|
||||
- datafix: update status kerkfabriek weelde [OP-3598]
|
||||
- datafix: delete change event and update status protestantse kerk oostende [OP-3604]
|
||||
- datafix: update change event date islamic assocation [OP-3602]
|
||||
### Deploy Notes
|
||||
```
|
||||
drc pull frontend; drc up -d frontend
|
||||
drc restart migrations; drc logs -ft --tail=200 migrations
|
||||
drc restart migrations-triggering-indexing && drc logs -ft --tail=200 migrations-triggering-indexing
|
||||
drc up -d kbo-data-sync
|
||||
drc exec kbo-data-sync curl -X POST http://localhost/sync-all-kbo-data
|
||||
|
||||
drc restart delta-producer-publication-graph-maintainer
|
||||
drc exec delta-producer-background-jobs-initiator curl -X POST http://localhost/public/healing-jobs # or wait until nightly healing kicks in
|
||||
drc exec delta-producer-background-jobs-initiator curl -X POST http://localhost/organizations/healing-jobs # or wait until nightly healing kicks in
|
||||
drc exec db-cleanup curl -X POST "http://localhost/cleanup"
|
||||
```
|
||||
|
||||
## v1.31.3 (2025-05-08)
|
||||
### Backend
|
||||
- Migrate active organizations linked to inactive CKB to the active one. [DL-6604]
|
||||
### Deploy notes
|
||||
```
|
||||
drc restart migrations-triggering-indexing && drc logs -ft --tail=200 migrations-triggering-indexing
|
||||
```
|
||||
|
||||
## v1.31.2 (2025-04-02)
|
||||
### Backend
|
||||
- Extend the public producer to include: [CLBV-980]
|
||||
- NIS codes
|
||||
- Sites and statuses of representative organs
|
||||
- Secondary sites with their contacts and addresses
|
||||
- Site descriptions
|
||||
|
||||
### Deploy notes
|
||||
```
|
||||
drc restart delta-producer-publication-graph-maintainer
|
||||
```
|
||||
|
||||
## v1.31.1 (2025-04-01)
|
||||
### Backend
|
||||
- Removal of change events of 8 ckb's + update of their status [OP-3562]
|
||||
### Deploy Notes
|
||||
```
|
||||
drc restart migrations-triggering-indexing; drc logs -ft --tail=200 migrations-triggering-indexing
|
||||
drc restart migrations; drc logs -ft --tail=200 migrations
|
||||
```
|
||||
|
||||
## v1.31.0 (2025-03-27)
|
||||
### Frontend
|
||||
- Bump to version [v1.30.0](https://github.com/lblod/frontend-organization-portal/blob/v1.30.0/CHANGELOG.md#v1300-2025-03-27)
|
||||
### Backend
|
||||
- Datafix: move status for municipalities and provinces to the `shared` graph such that it can be read by worship users [OP-3469]
|
||||
- Bump `triplestore` and `publication-triplestore` to `v1.3.0-rc.1`. [OP-2492] [OP-3547]
|
||||
- Add missing docker compose keys. [DL-6490]
|
||||
- Reorganize delta consumers config to harmonize with the ecosystem
|
||||
- Set up the dashboard app [OP-3103]
|
||||
- Datafix: correct date of change event of kerkfabriek st petrus [OP-3555]
|
||||
- Update OCMWv to VVMW [OP-3565] and back. It's technically a nil-operation. But you should run the migrations nevertheless.
|
||||
### Deploy notes
|
||||
```
|
||||
drc restart migrations-triggering-indexing
|
||||
drc restart migrations; drc logs -ft --tail=200 migrations
|
||||
drc pull frontend; drc up -d frontend
|
||||
drc up -d mandatarissen-consumer leidinggevenden-consumer worship-services-main-info-consumer worship-services-private-info-consumer
|
||||
```
|
||||
#### For upgrade databases
|
||||
[This README](https://github.com/Riadabd/upgrade-virtuoso) provides the necessary steps for upgrading the database. **NOTE**: This will involve shutting down the app for small period of time (around 30 minutes).
|
||||
#### For adding the missing keys
|
||||
```
|
||||
drc up -d search elasticsearch
|
||||
```
|
||||
|
||||
#### Dashboard
|
||||
|
||||
The dashboard requires some server specific configuration before it can be used.
|
||||
|
||||
##### 1. Dashboard domains
|
||||
To configure the domain name that's used by the dashboard frontend, you can add it to the `VIRTUAL_HOST` and `LETSENCRYPT_HOST` environment variables of the identifier service.
|
||||
- DEV domain: dashboard.dev.app-organisation-portal.contacthub-dev.s.redhost.be
|
||||
- QA domain: dashboard.qa.app-organisation-portal.contacthub-dev.s.redhost.be
|
||||
- PROD domain: dashboard.app-organisation-portal.organisaties.s.redpencil.io
|
||||
|
||||
##### 2. Dashboard users
|
||||
Before we can generate a user we need to add an application salt to the server. Add a `MU_APPLICATION_SALT` environment variable to the `dashboard-login` service in the docker-compose.override.yml file.
|
||||
|
||||
Once this is done you can generate a user by running `mu script project-scripts generate-dashboard-login` and following the prompts. A new local migration will be generated which can be run by restarting the migrations service and which will insert the new user into the database.
|
||||
|
||||
Store the login credentials as a comment in the docker-compose.override.yml file.
|
||||
|
||||
##### 3. (Re)start the needed services
|
||||
`drc up -d frontend-dashboard dashboard-login identifier; drc restart dispatcher resource db`
|
||||
|
||||
## 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.6 (2025-03-25)
|
||||
### Backend
|
||||
- Flushed landingzones [DL-6552]
|
||||
### Deploy notes
|
||||
```
|
||||
drc restart migrations
|
||||
```
|
||||
|
||||
## 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.
|
||||
- Datafix. Fusiegemeentes had different bestuursfuncties attached to OCMW and Gemeente. [DL-6377]
|
||||
However, business-rule-wise, these bestuursfuncties are shared.
|
||||
### Deploy commands
|
||||
```
|
||||
drc up -d migrations
|
||||
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
|
||||
- Added "Opdrachthoudende vereniging met private deelname" in delta public (DL-6368)
|
||||
### Deploy commands
|
||||
```
|
||||
drc up -d migrations
|
||||
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)
|
||||
|
||||
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
|
||||
|
||||
@@ -53,7 +53,8 @@ defmodule Acl.UserGroups.Config do
|
||||
"http://lblod.data.gift/vocabularies/organisatie/VoorwaardenBedienaarCriterium",
|
||||
"http://lblod.data.gift/vocabularies/organisatie/BedienaarCriteriumBewijsstuk",
|
||||
"http://lblod.data.gift/vocabularies/organisatie/EredienstBeroepen",
|
||||
"http://lblod.data.gift/vocabularies/organisatie/Rechtsvormtype"
|
||||
"http://lblod.data.gift/vocabularies/organisatie/Rechtsvormtype",
|
||||
"http://www.w3.org/ns/prov#Location"
|
||||
]
|
||||
|
||||
@org_type [
|
||||
@@ -79,10 +80,11 @@ defmodule Acl.UserGroups.Config do
|
||||
"http://www.w3.org/ns/org#ChangeEvent",
|
||||
"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 [
|
||||
"http://www.w3.org/ns/prov#Location",
|
||||
"http://xmlns.com/foaf/0.1/Image",
|
||||
"http://www.semanticdesktop.org/ontologies/2007/03/22/nfo#FileDataObject"
|
||||
]
|
||||
@@ -105,6 +107,17 @@ defmodule Acl.UserGroups.Config do
|
||||
}"
|
||||
end
|
||||
|
||||
defp can_access_dashboard() do
|
||||
%AccessByQuery{
|
||||
vars: [],
|
||||
query: "PREFIX ext: <http://mu.semte.ch/vocabularies/ext/>
|
||||
SELECT DISTINCT ?session WHERE {
|
||||
VALUES ?session { <SESSION_ID> }
|
||||
?session ext:sessionRole \"LoketLB-AdminDashboardOrganisatiePortaalGebruiker\" .
|
||||
}"
|
||||
}
|
||||
end
|
||||
|
||||
def user_groups do
|
||||
[
|
||||
%GroupSpec{
|
||||
@@ -204,6 +217,46 @@ defmodule Acl.UserGroups.Config do
|
||||
}
|
||||
]
|
||||
},
|
||||
# // Dashboard admin
|
||||
%GroupSpec{
|
||||
name: "o-admin-rwf",
|
||||
useage: [:read, :write, :read_for_write],
|
||||
access: can_access_dashboard(),
|
||||
graphs: [
|
||||
%GraphSpec{
|
||||
graph: "http://mu.semte.ch/graphs/reports",
|
||||
constraint: %ResourceConstraint{
|
||||
resource_types: [
|
||||
"http://lblod.data.gift/vocabularies/reporting/Report",
|
||||
"http://open-services.net/ns/core#Error",
|
||||
"http://www.semanticdesktop.org/ontologies/2007/03/22/nfo#DataContainer",
|
||||
"http://www.semanticdesktop.org/ontologies/2007/03/22/nfo#FileDataObject"
|
||||
]
|
||||
}
|
||||
},
|
||||
%GraphSpec{
|
||||
graph: "http://mu.semte.ch/graphs/system/jobs",
|
||||
constraint: %ResourceConstraint{
|
||||
resource_types: [
|
||||
"http://vocab.deri.ie/cogs#Job",
|
||||
"http://www.semanticdesktop.org/ontologies/2007/03/22/nfo#DataContainer",
|
||||
"http://www.semanticdesktop.org/ontologies/2007/03/22/nfo#FileDataObject"
|
||||
]
|
||||
}
|
||||
},
|
||||
# OP stores jobs in multiple graphs, so we configure both until they are merged into one graph
|
||||
%GraphSpec{
|
||||
graph: "http://mu.semte.ch/graphs/jobs",
|
||||
constraint: %ResourceConstraint{
|
||||
resource_types: [
|
||||
"http://vocab.deri.ie/cogs#Job",
|
||||
"http://www.semanticdesktop.org/ontologies/2007/03/22/nfo#DataContainer",
|
||||
"http://www.semanticdesktop.org/ontologies/2007/03/22/nfo#FileDataObject"
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
# // CLEANUP
|
||||
#
|
||||
|
||||
@@ -1,30 +0,0 @@
|
||||
const BATCH_SIZE = parseInt(process.env.BATCH_SIZE) || 1000;
|
||||
const MU_CALL_SCOPE_ID_INITIAL_SYNC = process.env.MU_CALL_SCOPE_ID_INITIAL_SYNC || 'http://redpencil.data.gift/id/concept/muScope/deltas/consumer/initialSync';
|
||||
const BYPASS_MU_AUTH_FOR_EXPENSIVE_QUERIES = process.env.BYPASS_MU_AUTH_FOR_EXPENSIVE_QUERIES == 'true' ? true : false;
|
||||
const DIRECT_DATABASE_ENDPOINT = process.env.DIRECT_DATABASE_ENDPOINT || 'http://virtuoso:8890/sparql';
|
||||
const MAX_DB_RETRY_ATTEMPTS = parseInt(process.env.MAX_DB_RETRY_ATTEMPTS || 5);
|
||||
const MAX_REASONING_RETRY_ATTEMPTS = parseInt(process.env.MAX_REASONING_RETRY_ATTEMPTS || 5);
|
||||
const SLEEP_BETWEEN_BATCHES = parseInt(process.env.SLEEP_BETWEEN_BATCHES || 100);
|
||||
const SLEEP_TIME_AFTER_FAILED_REASONING_OPERATION = parseInt(process.env.SLEEP_TIME_AFTER_FAILED_REASONING_OPERATION || 10000);
|
||||
const SLEEP_TIME_AFTER_FAILED_DB_OPERATION = parseInt(process.env.SLEEP_TIME_AFTER_FAILED_DB_OPERATION || 60000);
|
||||
|
||||
// Graphs
|
||||
const LANDING_ZONE_GRAPH = process.env.DCR_LANDING_ZONE_GRAPH || `http://mu.semte.ch/graphs/landing-zone/clb-contact-data`;
|
||||
|
||||
// ENDPOINTS
|
||||
const LANDING_ZONE_DATABASE = process.env.DCR_LANDING_ZONE_DATABASE || 'database';
|
||||
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
|
||||
};
|
||||
@@ -1,268 +0,0 @@
|
||||
|
||||
const PREFIXES = `
|
||||
PREFIX besluit: <http://data.vlaanderen.be/ns/besluit#>
|
||||
PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
|
||||
PREFIX lblodgeneriek: <https://data.lblod.info/vocabularies/generiek/>
|
||||
PREFIX org: <http://www.w3.org/ns/org#>
|
||||
PREFIX code: <http://lblod.data.gift/vocabularies/organisatie/>
|
||||
PREFIX adms: <http://www.w3.org/ns/adms#>
|
||||
PREFIX generiek: <https://data.vlaanderen.be/ns/generiek#>
|
||||
PREFIX ere: <http://data.lblod.info/vocabularies/erediensten/>
|
||||
PREFIX organisatie: <https://data.vlaanderen.be/ns/organisatie#>
|
||||
PREFIX mu: <http://mu.semte.ch/vocabularies/core/>
|
||||
PREFIX euvoc: <http://publications.europa.eu/ontology/euvoc#>
|
||||
PREFIX prov: <http://www.w3.org/ns/prov#>
|
||||
PREFIX schema: <http://schema.org/>
|
||||
PREFIX locn: <http://www.w3.org/ns/locn#>
|
||||
PREFIX ext: <http://mu.semte.ch/vocabularies/ext/>`
|
||||
|
||||
const contextConfig = {
|
||||
addTypes: {
|
||||
scope: 'all', // 'inserts, 'deletes', 'all' or none. To add rdf:type to subjects of inserts, deletes or both
|
||||
exhausitive: false, // true or false: find all types for a subject, even if one is already present in delta
|
||||
},
|
||||
contextQueries: [
|
||||
{
|
||||
trigger: { // subjectType or predicateValue
|
||||
subjectType: "org:Site"
|
||||
},
|
||||
queryTemplate: (subject) => `
|
||||
${PREFIXES}
|
||||
CONSTRUCT {
|
||||
${subject} ext:goesInGraph ?graphOne.
|
||||
${subject} ext:goesInGraph ?graphTwo.
|
||||
${subject} ext:goesInGraph ?graphThree.
|
||||
${subject} ext:goesInGraph ?graphFour.
|
||||
} WHERE {
|
||||
OPTIONAL {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?adminUnitOne org:hasPrimarySite ${subject}.
|
||||
}
|
||||
BIND(<http://mu.semte.ch/graphs/administrative-unit> AS ?graphOne)
|
||||
}
|
||||
OPTIONAL {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?adminUnitTwo org:hasSite ${subject}.
|
||||
}
|
||||
BIND(<http://mu.semte.ch/graphs/administrative-unit> AS ?graphTwo)
|
||||
}
|
||||
OPTIONAL {
|
||||
GRAPH <http://mu.semte.ch/graphs/worship-service> {
|
||||
?adminUnitThree org:hasPrimarySite ${subject}.
|
||||
}
|
||||
BIND(<http://mu.semte.ch/graphs/worship-service> AS ?graphThree)
|
||||
}
|
||||
OPTIONAL {
|
||||
GRAPH <http://mu.semte.ch/graphs/worship-service> {
|
||||
?adminUnitFour org:hasSite ${subject}.
|
||||
}
|
||||
BIND(<http://mu.semte.ch/graphs/worship-service> AS ?graphFour)
|
||||
}
|
||||
}`
|
||||
},
|
||||
{
|
||||
trigger: { // subjectType or predicateValue
|
||||
subjectType: "schema:ContactPoint"
|
||||
},
|
||||
queryTemplate: (subject) => `
|
||||
${PREFIXES}
|
||||
CONSTRUCT {
|
||||
${subject} ext:goesInGraph ?graphOne.
|
||||
${subject} ext:goesInGraph ?graphTwo.
|
||||
} WHERE {
|
||||
OPTIONAL {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?siteOne org:siteAddress ${subject}.
|
||||
}
|
||||
BIND(<http://mu.semte.ch/graphs/administrative-unit> AS ?graphOne)
|
||||
}
|
||||
OPTIONAL {
|
||||
GRAPH <http://mu.semte.ch/graphs/worship-service> {
|
||||
?siteTwo org:siteAddress ${subject}.
|
||||
}
|
||||
BIND(<http://mu.semte.ch/graphs/worship-service> AS ?graphTwo)
|
||||
}
|
||||
}`
|
||||
},
|
||||
{
|
||||
trigger: { // subjectType or predicateValue
|
||||
subjectType: "locn:Address"
|
||||
},
|
||||
queryTemplate: (subject) => `
|
||||
${PREFIXES}
|
||||
CONSTRUCT {
|
||||
${subject} ext:goesInGraph ?graphOne.
|
||||
${subject} ext:goesInGraph ?graphTwo.
|
||||
} WHERE {
|
||||
OPTIONAL {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?siteOne organisatie:bestaatUit ${subject}.
|
||||
}
|
||||
BIND(<http://mu.semte.ch/graphs/administrative-unit> AS ?graphOne)
|
||||
}
|
||||
OPTIONAL {
|
||||
GRAPH <http://mu.semte.ch/graphs/worship-service> {
|
||||
?siteTwo organisatie:bestaatUit ${subject}.
|
||||
}
|
||||
BIND(<http://mu.semte.ch/graphs/worship-service> AS ?graphTwo)
|
||||
}
|
||||
}`
|
||||
},
|
||||
//Predicate triggers to solve out of order deltas
|
||||
{
|
||||
trigger: { // subjectType or predicateValue
|
||||
predicateValue: "org:hasSite"
|
||||
},
|
||||
//We assume that only administrative units are in the shared graph of OP due to the need of sharing the prefLabel with worships services
|
||||
queryTemplate: (subject) => `
|
||||
${PREFIXES}
|
||||
CONSTRUCT {
|
||||
${subject} ext:goesInGraph ?graphOne.
|
||||
${subject} ext:goesInGraph ?graphTwo.
|
||||
?site ?pSite ?oSite.
|
||||
?contact ?pContact ?oContact.
|
||||
?address ?pAddress ?oAddress.
|
||||
?addressContact ?pAddressContact ?oAddressContact.
|
||||
} WHERE {
|
||||
OPTIONAL {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
${subject} a ?type.
|
||||
}
|
||||
BIND(<http://mu.semte.ch/graphs/administrative-unit> AS ?graphOne)
|
||||
}
|
||||
OPTIONAL {
|
||||
GRAPH <http://mu.semte.ch/graphs/shared> {
|
||||
${subject} a ?type.
|
||||
}
|
||||
BIND(<http://mu.semte.ch/graphs/administrative-unit> AS ?graphOne)
|
||||
}
|
||||
OPTIONAL {
|
||||
GRAPH <http://mu.semte.ch/graphs/worship-service> {
|
||||
${subject} a ?type.
|
||||
}
|
||||
BIND(<http://mu.semte.ch/graphs/worship-service> AS ?graphTwo)
|
||||
}
|
||||
${subject} org:hasSite ?site.
|
||||
?site ?pSite ?oSite.
|
||||
{
|
||||
?site org:siteAddress ?contact.
|
||||
?contact ?pContact ?oContact.
|
||||
?contact locn:address ?addressContact.
|
||||
?addressContact ?pAddressContact ?oAddressContact.
|
||||
}
|
||||
UNION
|
||||
{
|
||||
?site org:siteAddress ?contact.
|
||||
?contact ?pContact ?oContact.
|
||||
}
|
||||
UNION
|
||||
{
|
||||
?site organisatie:bestaatUit ?address.
|
||||
?address ?pAddress ?oAddress.
|
||||
}
|
||||
}`
|
||||
},
|
||||
{
|
||||
trigger: { // subjectType or predicateValue
|
||||
predicateValue: "org:hasPrimarySite"
|
||||
},
|
||||
//We assume that only administrative units are in the shared graph of OP due to the need of sharing the prefLabel with worships services
|
||||
queryTemplate: (subject) => `
|
||||
${PREFIXES}
|
||||
CONSTRUCT {
|
||||
${subject} ext:goesInGraph ?graphOne.
|
||||
${subject} ext:goesInGraph ?graphTwo.
|
||||
?site ?pSite ?oSite.
|
||||
?contact ?pContact ?oContact.
|
||||
?address ?pAddress ?oAddress.
|
||||
?addressContact ?pAddressContact ?oAddressContact.
|
||||
} WHERE {
|
||||
OPTIONAL {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
${subject} a ?type.
|
||||
}
|
||||
BIND(<http://mu.semte.ch/graphs/administrative-unit> AS ?graphOne)
|
||||
}
|
||||
OPTIONAL {
|
||||
GRAPH <http://mu.semte.ch/graphs/shared> {
|
||||
${subject} a ?type.
|
||||
}
|
||||
BIND(<http://mu.semte.ch/graphs/administrative-unit> AS ?graphOne)
|
||||
}
|
||||
OPTIONAL {
|
||||
GRAPH <http://mu.semte.ch/graphs/worship-service> {
|
||||
${subject} a ?type.
|
||||
}
|
||||
BIND(<http://mu.semte.ch/graphs/worship-service> AS ?graphTwo)
|
||||
}
|
||||
${subject} org:hasPrimarySite ?site.
|
||||
?site ?pSite ?oSite.
|
||||
{
|
||||
?site org:siteAddress ?contact.
|
||||
?contact ?pContact ?oContact.
|
||||
?contact locn:address ?addressContact.
|
||||
?addressContact ?pAddressContact ?oAddressContact.
|
||||
}
|
||||
UNION
|
||||
{
|
||||
?site org:siteAddress ?contact.
|
||||
?contact ?pContact ?oContact.
|
||||
}
|
||||
UNION
|
||||
{
|
||||
?site organisatie:bestaatUit ?address.
|
||||
?address ?pAddress ?oAddress.
|
||||
}
|
||||
}`
|
||||
},
|
||||
{
|
||||
trigger: { // subjectType or predicateValue
|
||||
predicateValue: "org:siteAddress"
|
||||
},
|
||||
queryTemplate: (subject) => `
|
||||
${PREFIXES}
|
||||
CONSTRUCT {
|
||||
?contact ?pContact ?oContact.
|
||||
?addressContact ?pAddressContact ?oAddressContact.
|
||||
} WHERE {
|
||||
${subject} org:siteAddress ?contact.
|
||||
?contact ?pContact ?oContact.
|
||||
OPTIONAL {
|
||||
?contact locn:address ?addressContact.
|
||||
?addressContact ?pAddressContact ?oAddressContact.
|
||||
}
|
||||
}`
|
||||
},
|
||||
{
|
||||
trigger: { // subjectType or predicateValue
|
||||
predicateValue: "locn:address"
|
||||
},
|
||||
queryTemplate: (subject) => `
|
||||
${PREFIXES}
|
||||
CONSTRUCT {
|
||||
?addressContact ?pAddressContact ?oAddressContact.
|
||||
} WHERE {
|
||||
${subject} locn:address ?addressContact.
|
||||
?addressContact ?pAddressContact ?oAddressContact.
|
||||
}`
|
||||
},
|
||||
{
|
||||
trigger: { // subjectType or predicateValue
|
||||
predicateValue: "organisatie:bestaatUit"
|
||||
},
|
||||
queryTemplate: (subject) => `
|
||||
${PREFIXES}
|
||||
CONSTRUCT {
|
||||
?address ?pAddress ?oAddress.
|
||||
} WHERE {
|
||||
${subject} organisatie:bestaatUit ?address.
|
||||
?address ?pAddress ?oAddress.
|
||||
}`
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
contextConfig,
|
||||
PREFIXES
|
||||
};
|
||||
@@ -1,104 +0,0 @@
|
||||
const {
|
||||
deleteFromPublicGraph,
|
||||
insertIntoPublicGraph,
|
||||
deleteFromSpecificGraphs,
|
||||
insertIntoSpecificGraphs
|
||||
} = require('./util');
|
||||
|
||||
const {
|
||||
LANDING_ZONE_GRAPH
|
||||
} = require('./config')
|
||||
|
||||
const publicTypes = [
|
||||
'<http://lblod.data.gift/vocabularies/organisatie/TypeVestiging>'
|
||||
]
|
||||
|
||||
/**
|
||||
* Dispatch the fetched information to a target graph.
|
||||
* Note: <share://file/data> will be ADDED to it's own graph.
|
||||
* We take only care of adding them, not updating triples, this is a TODO
|
||||
* @param { mu, muAuthSudo } lib - The provided libraries from the host service.
|
||||
* @param { termObjectChangeSets: { deletes, inserts } } data - The fetched changes sets, which objects of serialized Terms
|
||||
* [ {
|
||||
* graph: "<http://foo>",
|
||||
* subject: "<http://bar>",
|
||||
* predicate: "<http://baz>",
|
||||
* object: "<http://boom>^^<http://datatype>"
|
||||
* }
|
||||
* ]
|
||||
* @return {void} Nothing
|
||||
*/
|
||||
async function dispatch(lib, data) {
|
||||
let { termObjectChangeSets, termObjectChangeSetsWithContext } = data;
|
||||
|
||||
// Both arrays are the same length, so we can zip them together for easier processing
|
||||
zippedChangeSets = termObjectChangeSets.map((o, i) => ({
|
||||
original: o,
|
||||
withContext: termObjectChangeSetsWithContext && termObjectChangeSetsWithContext[i]
|
||||
}));
|
||||
|
||||
console.log(`Received ${zippedChangeSets.length} change sets`)
|
||||
|
||||
for (let { original, withContext } of zippedChangeSets) {
|
||||
|
||||
const {public: insertsOnPublic, target: insertsOnGraphs} = separateBetweenTargetAndPublic(original.inserts, withContext.inserts)
|
||||
const {public: deletesOnPublic, target: deletesOnGraphs} = separateBetweenTargetAndPublic(original.deletes, withContext.deletes)
|
||||
|
||||
await deleteFromPublicGraph(lib, deletesOnPublic);
|
||||
await deleteFromSpecificGraphs(lib, deletesOnGraphs);
|
||||
await insertIntoPublicGraph(lib, insertsOnPublic);
|
||||
await insertIntoSpecificGraphs(lib, insertsOnGraphs);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
function separateBetweenTargetAndPublic(changes, context) {
|
||||
const changesOnPublic = new Set();
|
||||
const changesOnGraphs = {};
|
||||
for(let change of changes) {
|
||||
const subject = change.subject;
|
||||
const contextTriples = context.filter((context) => context.subject === subject);
|
||||
const graphTriple = contextTriples.find(
|
||||
(context) => context.predicate === '<http://mu.semte.ch/vocabularies/ext/goesInGraph>'
|
||||
&& context.object !== `<${LANDING_ZONE_GRAPH}>`
|
||||
)
|
||||
const otherContextTriples = context.filter(
|
||||
(context) => context.predicate !== '<http://mu.semte.ch/vocabularies/ext/goesInGraph>'
|
||||
&& context.predicate !== '<http://mu.semte.ch/vocabularies/ext/contextDataGoesInGraph>'
|
||||
&& !(context.subject === subject && context.predicate === '<http://www.w3.org/1999/02/22-rdf-syntax-ns#type>')
|
||||
);
|
||||
if(graphTriple) {
|
||||
const graph = graphTriple.object.slice(1,-1); // We have to slice it to remove the "<" and ">"
|
||||
if(change.object !== '') {
|
||||
if(!changesOnGraphs[graph]) {
|
||||
changesOnGraphs[graph] = new Set();
|
||||
}
|
||||
changesOnGraphs[graph].add(`${change.subject} ${change.predicate} ${change.object}.`)
|
||||
}
|
||||
for(let triple of otherContextTriples) {
|
||||
if(triple.object === '') continue;
|
||||
if(!changesOnGraphs[graph]) {
|
||||
changesOnGraphs[graph] = new Set();
|
||||
}
|
||||
changesOnGraphs[graph].add(`${triple.subject} ${triple.predicate} ${triple.object}.`)
|
||||
}
|
||||
}
|
||||
const typeTriple = contextTriples.find(
|
||||
(context) => context.subject === subject
|
||||
&& context.predicate === '<http://www.w3.org/1999/02/22-rdf-syntax-ns#type>'
|
||||
);
|
||||
if(!typeTriple) continue;
|
||||
const type = typeTriple.object;
|
||||
if(publicTypes.includes(type)) {
|
||||
changesOnPublic.add(`${change.subject} ${change.predicate} ${change.object}.`)
|
||||
for(let triple of otherContextTriples) {
|
||||
changesOnPublic.add(`${triple.subject} ${triple.predicate} ${triple.object}.`)
|
||||
}
|
||||
}
|
||||
}
|
||||
return {public: changesOnPublic, target: changesOnGraphs}
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
dispatch
|
||||
};
|
||||
@@ -1,69 +0,0 @@
|
||||
const { batchedDbUpdate, moveDataAfterInitialSync } = 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,
|
||||
LANDING_ZONE_GRAPH,
|
||||
} = 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 - without any mapping or filtering
|
||||
// 2. One-time reasoning run with the full landing zone graph and write the results to the target graph (on-finish)
|
||||
|
||||
if (BYPASS_MU_AUTH_FOR_EXPENSIVE_QUERIES) {
|
||||
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 },
|
||||
endpoint,
|
||||
BATCH_SIZE,
|
||||
MAX_DB_RETRY_ATTEMPTS,
|
||||
SLEEP_BETWEEN_BATCHES,
|
||||
SLEEP_TIME_AFTER_FAILED_DB_OPERATION
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
async function onFinishInitialIngest(lib,data) {
|
||||
const { muAuthSudo } = lib;
|
||||
|
||||
console.log(`!! On-finish triggered !!`);
|
||||
|
||||
await moveDataAfterInitialSync(muAuthSudo.updateSudo, endpoint)
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
dispatch,
|
||||
onFinishInitialIngest
|
||||
};
|
||||
@@ -1,337 +0,0 @@
|
||||
const {
|
||||
MAX_DB_RETRY_ATTEMPTS,
|
||||
SLEEP_BETWEEN_BATCHES,
|
||||
SLEEP_TIME_AFTER_FAILED_DB_OPERATION,
|
||||
LANDING_ZONE_GRAPH,
|
||||
BATCH_SIZE,
|
||||
} = require('./config');
|
||||
|
||||
const prefixes = `
|
||||
PREFIX besluit: <http://data.vlaanderen.be/ns/besluit#>
|
||||
PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
|
||||
PREFIX lblodgeneriek: <https://data.lblod.info/vocabularies/generiek/>
|
||||
PREFIX org: <http://www.w3.org/ns/org#>
|
||||
PREFIX code: <http://lblod.data.gift/vocabularies/organisatie/>
|
||||
PREFIX adms: <http://www.w3.org/ns/adms#>
|
||||
PREFIX generiek: <https://data.vlaanderen.be/ns/generiek#>
|
||||
PREFIX ere: <http://data.lblod.info/vocabularies/erediensten/>
|
||||
PREFIX organisatie: <https://data.vlaanderen.be/ns/organisatie#>
|
||||
PREFIX mu: <http://mu.semte.ch/vocabularies/core/>
|
||||
PREFIX euvoc: <http://publications.europa.eu/ontology/euvoc#>
|
||||
PREFIX prov: <http://www.w3.org/ns/prov#>
|
||||
PREFIX schema: <http://schema.org/>
|
||||
PREFIX locn: <http://www.w3.org/ns/locn#>
|
||||
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
|
||||
PREFIX ext:<http://mu.semte.ch/vocabularies/ext/>
|
||||
`
|
||||
|
||||
async function batchedDbUpdate(
|
||||
muUpdate,
|
||||
graph,
|
||||
triples,
|
||||
extraHeaders,
|
||||
endpoint,
|
||||
batchSize,
|
||||
maxAttempts,
|
||||
sleepBetweenBatches = 1000,
|
||||
sleepTimeOnFail = 1000,
|
||||
operation = 'INSERT'
|
||||
) {
|
||||
for (let i = 0; i < triples.length; i += batchSize) {
|
||||
console.log(`Inserting triples in batch: ${i}-${i + batchSize}`);
|
||||
|
||||
const batch = triples.slice(i, i + batchSize).join('\n');
|
||||
|
||||
const insertCall = async () => {
|
||||
await muUpdate(`
|
||||
${operation} DATA {
|
||||
GRAPH <${graph}> {
|
||||
${batch}
|
||||
}
|
||||
}
|
||||
`, extraHeaders, endpoint);
|
||||
};
|
||||
|
||||
await operationWithRetry(insertCall, 0, maxAttempts, sleepTimeOnFail);
|
||||
|
||||
console.log(`Sleeping before next query execution: ${sleepBetweenBatches}`);
|
||||
await new Promise(r => setTimeout(r, sleepBetweenBatches));
|
||||
}
|
||||
}
|
||||
|
||||
async function operationWithRetry(callback,
|
||||
attempt,
|
||||
maxAttempts,
|
||||
sleepTimeOnFail) {
|
||||
try {
|
||||
if (typeof callback === "function")
|
||||
return await callback();
|
||||
else // Catch error from promise - not how I would do it normally, but allows re use of existing code.
|
||||
return await callback;
|
||||
}
|
||||
catch (e) {
|
||||
console.log(`Operation failed for ${callback.toString()}, attempt: ${attempt} of ${maxAttempts}`);
|
||||
console.log(`Error: ${e}`);
|
||||
console.log(`Sleeping ${sleepTimeOnFail} ms`);
|
||||
|
||||
if (attempt >= maxAttempts) {
|
||||
console.log(`Max attempts reached for ${callback.toString()}, giving up`);
|
||||
throw e;
|
||||
}
|
||||
|
||||
await new Promise(r => setTimeout(r, sleepTimeOnFail));
|
||||
return operationWithRetry(callback, ++attempt, maxAttempts, sleepTimeOnFail);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
async function insertIntoPublicGraph(lib, statements) {
|
||||
console.log(`Inserting ${statements.length} statements into public graph`);
|
||||
|
||||
await batchedDbUpdate(
|
||||
lib.muAuthSudo.updateSudo,
|
||||
'http://mu.semte.ch/graphs/public',
|
||||
Array.from(statements),
|
||||
{},
|
||||
process.env.MU_SPARQL_ENDPOINT,
|
||||
BATCH_SIZE,
|
||||
MAX_DB_RETRY_ATTEMPTS,
|
||||
SLEEP_BETWEEN_BATCHES,
|
||||
SLEEP_TIME_AFTER_FAILED_DB_OPERATION,
|
||||
'INSERT');
|
||||
}
|
||||
|
||||
async function insertIntoSpecificGraphs(lib, statementsWithGraphs) {
|
||||
|
||||
for( let graph in statementsWithGraphs) {
|
||||
console.log(`Inserting ${statementsWithGraphs[graph].length} statements into ${graph} graph`);
|
||||
await batchedDbUpdate(
|
||||
lib.muAuthSudo.updateSudo,
|
||||
graph,
|
||||
Array.from(statementsWithGraphs[graph]),
|
||||
{},
|
||||
process.env.MU_SPARQL_ENDPOINT,
|
||||
BATCH_SIZE,
|
||||
MAX_DB_RETRY_ATTEMPTS,
|
||||
SLEEP_BETWEEN_BATCHES,
|
||||
SLEEP_TIME_AFTER_FAILED_DB_OPERATION,
|
||||
'INSERT');
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
async function deleteFromPublicGraph(lib, statements) {
|
||||
console.log(`Deleting ${statements.length} statements from public graph`);
|
||||
|
||||
await batchedDbUpdate(
|
||||
lib.muAuthSudo.updateSudo,
|
||||
'http://mu.semte.ch/graphs/public',
|
||||
Array.from(statements),
|
||||
{},
|
||||
process.env.MU_SPARQL_ENDPOINT,
|
||||
BATCH_SIZE,
|
||||
MAX_DB_RETRY_ATTEMPTS,
|
||||
SLEEP_BETWEEN_BATCHES,
|
||||
SLEEP_TIME_AFTER_FAILED_DB_OPERATION,
|
||||
'DELETE');
|
||||
}
|
||||
|
||||
async function deleteFromSpecificGraphs(lib, statementsWithGraphs) {
|
||||
|
||||
|
||||
for( let graph in statementsWithGraphs) {
|
||||
console.log(`Deleting ${statementsWithGraphs[graph].length} statements from ${graph} graph`);
|
||||
await batchedDbUpdate(
|
||||
lib.muAuthSudo.updateSudo,
|
||||
graph,
|
||||
Array.from(statementsWithGraphs[graph]),
|
||||
{},
|
||||
process.env.MU_SPARQL_ENDPOINT,
|
||||
BATCH_SIZE,
|
||||
MAX_DB_RETRY_ATTEMPTS,
|
||||
SLEEP_BETWEEN_BATCHES,
|
||||
SLEEP_TIME_AFTER_FAILED_DB_OPERATION,
|
||||
'DELETE');
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
async function moveDataAfterInitialSync(muUpdate, endpoint) {
|
||||
// Move primary sites admin units
|
||||
await muUpdate(`
|
||||
${prefixes}
|
||||
INSERT {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?adminUnit org:hasPrimarySite ?site.
|
||||
?site ?pSite ?oSite.
|
||||
?contact ?pContact ?oContact.
|
||||
?address ?pAddress ?oAddress.
|
||||
?addressContact ?pAddressContact ?oAddressContact.
|
||||
}
|
||||
} WHERE {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?adminUnit a ?type.
|
||||
}
|
||||
GRAPH <${LANDING_ZONE_GRAPH}> {
|
||||
?adminUnit org:hasPrimarySite ?site.
|
||||
?site ?pSite ?oSite.
|
||||
{
|
||||
?site org:siteAddress ?contact.
|
||||
?contact ?pContact ?oContact.
|
||||
?contact locn:address ?addressContact.
|
||||
?addressContact ?pAddressContact ?oAddressContact.
|
||||
}
|
||||
UNION
|
||||
{
|
||||
?site org:siteAddress ?contact.
|
||||
?contact ?pContact ?oContact.
|
||||
}
|
||||
UNION
|
||||
{
|
||||
?site organisatie:bestaatUit ?address.
|
||||
?address ?pAddress ?oAddress.
|
||||
}
|
||||
}
|
||||
}
|
||||
`, undefined, endpoint)
|
||||
|
||||
// Move sites administrative units
|
||||
await muUpdate(`
|
||||
${prefixes}
|
||||
INSERT {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?adminUnit org:hasSite ?site.
|
||||
?site ?pSite ?oSite.
|
||||
?contact ?pContact ?oContact.
|
||||
?address ?pAddress ?oAddress.
|
||||
?addressContact ?pAddressContact ?oAddressContact.
|
||||
}
|
||||
} WHERE {
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
?adminUnit a ?type.
|
||||
}
|
||||
GRAPH <${LANDING_ZONE_GRAPH}> {
|
||||
?adminUnit org:hasSite ?site.
|
||||
?site ?pSite ?oSite.
|
||||
{
|
||||
?site org:siteAddress ?contact.
|
||||
?contact ?pContact ?oContact.
|
||||
?contact locn:address ?addressContact.
|
||||
?addressContact ?pAddressContact ?oAddressContact.
|
||||
}
|
||||
UNION
|
||||
{
|
||||
?site org:siteAddress ?contact.
|
||||
?contact ?pContact ?oContact.
|
||||
}
|
||||
UNION
|
||||
{
|
||||
?site organisatie:bestaatUit ?address.
|
||||
?address ?pAddress ?oAddress.
|
||||
}
|
||||
}
|
||||
}
|
||||
`, undefined, endpoint)
|
||||
|
||||
// Move primary sites worships
|
||||
await muUpdate(`
|
||||
${prefixes}
|
||||
INSERT {
|
||||
GRAPH <http://mu.semte.ch/graphs/worship-service> {
|
||||
?adminUnit org:hasPrimarySite ?site.
|
||||
?site ?pSite ?oSite.
|
||||
?contact ?pContact ?oContact.
|
||||
?address ?pAddress ?oAddress.
|
||||
?addressContact ?pAddressContact ?oAddressContact.
|
||||
}
|
||||
} WHERE {
|
||||
GRAPH <http://mu.semte.ch/graphs/worship-service> {
|
||||
?adminUnit a ?type.
|
||||
}
|
||||
GRAPH <${LANDING_ZONE_GRAPH}> {
|
||||
?adminUnit org:hasPrimarySite ?site.
|
||||
?site ?pSite ?oSite.
|
||||
{
|
||||
?site org:siteAddress ?contact.
|
||||
?contact ?pContact ?oContact.
|
||||
?contact locn:address ?addressContact.
|
||||
?addressContact ?pAddressContact ?oAddressContact.
|
||||
}
|
||||
UNION
|
||||
{
|
||||
?site org:siteAddress ?contact.
|
||||
?contact ?pContact ?oContact.
|
||||
}
|
||||
UNION
|
||||
{
|
||||
?site organisatie:bestaatUit ?address.
|
||||
?address ?pAddress ?oAddress.
|
||||
}
|
||||
}
|
||||
}
|
||||
`, undefined, endpoint)
|
||||
|
||||
// Move sites worships
|
||||
await muUpdate(`
|
||||
${prefixes}
|
||||
INSERT {
|
||||
GRAPH <http://mu.semte.ch/graphs/worship-service> {
|
||||
?adminUnit org:hasSite ?site.
|
||||
?site ?pSite ?oSite.
|
||||
?contact ?pContact ?oContact.
|
||||
?address ?pAddress ?oAddress.
|
||||
?addressContact ?pAddressContact ?oAddressContact.
|
||||
}
|
||||
} WHERE {
|
||||
GRAPH <http://mu.semte.ch/graphs/worship-service> {
|
||||
?adminUnit a ?type.
|
||||
}
|
||||
GRAPH <${LANDING_ZONE_GRAPH}> {
|
||||
?adminUnit org:hasSite ?site.
|
||||
?site ?pSite ?oSite.
|
||||
{
|
||||
?site org:siteAddress ?contact.
|
||||
?contact ?pContact ?oContact.
|
||||
?contact locn:address ?addressContact.
|
||||
?addressContact ?pAddressContact ?oAddressContact.
|
||||
}
|
||||
UNION
|
||||
{
|
||||
?site org:siteAddress ?contact.
|
||||
?contact ?pContact ?oContact.
|
||||
}
|
||||
UNION
|
||||
{
|
||||
?site organisatie:bestaatUit ?address.
|
||||
?address ?pAddress ?oAddress.
|
||||
}
|
||||
}
|
||||
}
|
||||
`, undefined, endpoint)
|
||||
|
||||
// Move sites worships
|
||||
await muUpdate(`
|
||||
${prefixes}
|
||||
INSERT {
|
||||
GRAPH <http://mu.semte.ch/graphs/public> {
|
||||
?type a <http://lblod.data.gift/vocabularies/organisatie/TypeVestiging>.
|
||||
?type ?a ?b.
|
||||
}
|
||||
} WHERE {
|
||||
GRAPH <${LANDING_ZONE_GRAPH}> {
|
||||
?type a <http://lblod.data.gift/vocabularies/organisatie/TypeVestiging>.
|
||||
?type ?a ?b.
|
||||
}
|
||||
}
|
||||
`, undefined, endpoint)
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
batchedDbUpdate,
|
||||
moveDataAfterInitialSync,
|
||||
insertIntoPublicGraph,
|
||||
deleteFromPublicGraph,
|
||||
insertIntoSpecificGraphs,
|
||||
deleteFromSpecificGraphs,
|
||||
};
|
||||
@@ -231,10 +231,12 @@ DefaultHost = localhost:8890
|
||||
;DefaultGraph = http://localhost:8890/dataspace
|
||||
;ImmutableGraphs = http://localhost:8890/dataspace
|
||||
ResultSetMaxRows = 1000000 ; 1 million
|
||||
MaxConstructTriples = 1000000 ; More info on this addition here: https://github.com/redpencilio/docker-virtuoso/pull/29
|
||||
;MaxQueryCostEstimationTime = 4000 ; in seconds
|
||||
MaxQueryExecutionTime = 1200 ; in seconds
|
||||
DefaultQuery = select distinct ?Concept where {[] a ?Concept} LIMIT 100
|
||||
DeferInferenceRulesInit = 0 ; controls inference rules loading
|
||||
MaxMemInUse = 0 ; limits the amount of memory for construct dict (0=unlimited). More info on this addition here: https://github.com/redpencilio/docker-virtuoso/pull/29
|
||||
;PingService = http://rpc.pingthesemanticweb.com/
|
||||
|
||||
[Plugins]
|
||||
|
||||
@@ -231,10 +231,12 @@ DefaultHost = localhost:8890
|
||||
;DefaultGraph = http://localhost:8890/dataspace
|
||||
;ImmutableGraphs = http://localhost:8890/dataspace
|
||||
ResultSetMaxRows = 1000000 ; 1 million
|
||||
MaxConstructTriples = 1000000 ; More info on this addition here: https://github.com/redpencilio/docker-virtuoso/pull/29
|
||||
;MaxQueryCostEstimationTime = 4000 ; in seconds
|
||||
MaxQueryExecutionTime = 1200 ; in seconds
|
||||
DefaultQuery = select distinct ?Concept where {[] a ?Concept} LIMIT 100
|
||||
DeferInferenceRulesInit = 0 ; controls inference rules loading
|
||||
MaxMemInUse = 0 ; limits the amount of memory for construct dict (0=unlimited). More info on this addition here: https://github.com/redpencilio/docker-virtuoso/pull/29
|
||||
;PingService = http://rpc.pingthesemanticweb.com/
|
||||
|
||||
[Plugins]
|
||||
|
||||
@@ -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 .
|
||||
}
|
||||
@@ -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 .
|
||||
}
|
||||
@@ -336,6 +336,7 @@
|
||||
"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#adresIsGelegenIn",
|
||||
"https://data.vlaanderen.be/ns/adres#land",
|
||||
"http://www.w3.org/ns/locn#fullAddress",
|
||||
"https://data.vlaanderen.be/ns/adres#verwijstNaar",
|
||||
@@ -389,7 +390,7 @@
|
||||
{
|
||||
"type": "http://www.w3.org/ns/prov#Location",
|
||||
"graphsFilter": [
|
||||
"http://mu.semte.ch/graphs/shared"
|
||||
"http://mu.semte.ch/graphs/public"
|
||||
],
|
||||
"properties": [
|
||||
"http://www.w3.org/2000/01/rdf-schema#label",
|
||||
@@ -511,6 +512,32 @@
|
||||
"properties": [
|
||||
"http://www.w3.org/2004/02/skos/core#prefLabel"
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "http://www.w3.org/ns/org#Membership",
|
||||
"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://www.w3.org/ns/org#organization",
|
||||
"http://www.w3.org/ns/org#member",
|
||||
"http://www.w3.org/ns/org#role"
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "http://www.w3.org/ns/org#Role",
|
||||
"graphsFilter": [
|
||||
"http://mu.semte.ch/graphs/public"
|
||||
],
|
||||
"properties": [
|
||||
"http://mu.semte.ch/vocabularies/core/uuid",
|
||||
"http://www.w3.org/2004/02/skos/core#prefLabel",
|
||||
"http://www.w3.org/2004/02/skos/core#broader",
|
||||
"http://www.w3.org/2004/02/skos/core#topConceptOf"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -157,6 +157,9 @@
|
||||
"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",
|
||||
@@ -204,7 +207,28 @@
|
||||
"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"
|
||||
"http://data.lblod.info/vocabularies/erediensten/vestigingstype",
|
||||
"http://purl.org/dc/terms/description"
|
||||
]
|
||||
},
|
||||
{
|
||||
"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"
|
||||
],
|
||||
"pathToConceptScheme": [
|
||||
"^http://www.w3.org/ns/org#hasSite",
|
||||
"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://www.w3.org/ns/org#siteAddress",
|
||||
"https://data.vlaanderen.be/ns/organisatie#bestaatUit",
|
||||
"http://data.lblod.info/vocabularies/erediensten/vestigingstype",
|
||||
"http://purl.org/dc/terms/description"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -228,6 +252,35 @@
|
||||
"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#adresIsGelegenIn",
|
||||
"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://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"
|
||||
],
|
||||
"pathToConceptScheme": [
|
||||
"^https://data.vlaanderen.be/ns/organisatie#bestaatUit",
|
||||
"^http://www.w3.org/ns/org#hasSite",
|
||||
"http://www.w3.org/ns/org#classification",
|
||||
"http://www.w3.org/2004/02/skos/core#inScheme"
|
||||
],
|
||||
"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#adresIsGelegenIn",
|
||||
"https://data.vlaanderen.be/ns/adres#land",
|
||||
"http://www.w3.org/ns/locn#fullAddress",
|
||||
"https://data.vlaanderen.be/ns/adres#verwijstNaar",
|
||||
@@ -258,6 +311,30 @@
|
||||
"http://schema.org/telephone"
|
||||
]
|
||||
},
|
||||
{
|
||||
"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"
|
||||
],
|
||||
"pathToConceptScheme": [
|
||||
"^http://www.w3.org/ns/org#siteAddress",
|
||||
"^http://www.w3.org/ns/org#hasSite",
|
||||
"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://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": [
|
||||
@@ -497,6 +574,133 @@
|
||||
"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/public"
|
||||
],
|
||||
"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"
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "http://www.w3.org/2004/02/skos/core#Concept",
|
||||
"graphsFilter": [
|
||||
"http://mu.semte.ch/graphs/public"
|
||||
],
|
||||
"pathToConceptScheme": [
|
||||
"http://www.w3.org/2004/02/skos/core#inScheme"
|
||||
],
|
||||
"properties": [
|
||||
"http://mu.semte.ch/vocabularies/core/uuid",
|
||||
"http://www.w3.org/2004/02/skos/core#altLabel",
|
||||
"http://www.w3.org/2004/02/skos/core#broadMatch",
|
||||
"http://www.w3.org/2004/02/skos/core#broader",
|
||||
"http://www.w3.org/2004/02/skos/core#exactMatch",
|
||||
"http://www.w3.org/2004/02/skos/core#inScheme",
|
||||
"http://www.w3.org/2004/02/skos/core#narrowMatch",
|
||||
"http://www.w3.org/2004/02/skos/core#narrower",
|
||||
"http://www.w3.org/2004/02/skos/core#notation",
|
||||
"http://www.w3.org/2004/02/skos/core#prefLabel",
|
||||
"http://www.w3.org/2004/02/skos/core#relatedMatch",
|
||||
"http://www.w3.org/2004/02/skos/core#topConceptOf",
|
||||
"https://schema.org/endDate",
|
||||
"https://schema.org/startDate"
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "http://publications.europa.eu/ontology/euvoc#Country",
|
||||
"graphsFilter": [
|
||||
"http://mu.semte.ch/graphs/public"
|
||||
],
|
||||
"properties": [
|
||||
"http://www.w3.org/2004/02/skos/core#prefLabel",
|
||||
"http://www.w3.org/2000/01/rdf-schema#label"
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "http://www.w3.org/ns/org#Membership",
|
||||
"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://www.w3.org/ns/org#organization",
|
||||
"http://www.w3.org/ns/org#member",
|
||||
"http://www.w3.org/ns/org#role"
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "http://www.w3.org/ns/org#Role",
|
||||
"graphsFilter": [
|
||||
"http://mu.semte.ch/graphs/public"
|
||||
],
|
||||
"properties": [
|
||||
"http://mu.semte.ch/vocabularies/core/uuid",
|
||||
"http://www.w3.org/2004/02/skos/core#prefLabel",
|
||||
"http://www.w3.org/2004/02/skos/core#broader",
|
||||
"http://www.w3.org/2004/02/skos/core#topConceptOf"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -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,364 +1,436 @@
|
||||
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 "/registered-organizations/*path", %{ accept: [:json], layer: :api} do
|
||||
Proxy.forward conn, path, "http://cache/registered-organizations/"
|
||||
match "/registered-organizations/*path", %{accept: [:json], layer: :api} do
|
||||
Proxy.forward(conn, path, "http://cache/registered-organizations/")
|
||||
end
|
||||
|
||||
match "/administrative-units/*path", %{ accept: [:json], layer: :api} do
|
||||
Proxy.forward conn, path, "http://cache/administrative-units/"
|
||||
match "/administrative-units/*path", %{accept: [:json], layer: :api} do
|
||||
Proxy.forward(conn, path, "http://cache/administrative-units/")
|
||||
end
|
||||
|
||||
match "/administrative-unit-classification-codes/*path", %{ accept: [:json], layer: :api} do
|
||||
Proxy.forward conn, path, "http://cache/administrative-unit-classification-codes/"
|
||||
match "/administrative-unit-classification-codes/*path", %{accept: [:json], layer: :api} do
|
||||
Proxy.forward(conn, path, "http://cache/administrative-unit-classification-codes/")
|
||||
end
|
||||
|
||||
match "/organization-classification-codes/*path", %{ accept: [:json], layer: :api} do
|
||||
Proxy.forward conn, path, "http://cache/organization-classification-codes/"
|
||||
match "/organization-classification-codes/*path", %{accept: [:json], layer: :api} do
|
||||
Proxy.forward(conn, path, "http://cache/organization-classification-codes/")
|
||||
end
|
||||
|
||||
match "/registered-organization-classification-codes/*path", %{ accept: [:json], layer: :api} do
|
||||
Proxy.forward conn, path, "http://cache/registered-organization-classification-codes/"
|
||||
match "/registered-organization-classification-codes/*path", %{accept: [:json], layer: :api} do
|
||||
Proxy.forward(conn, path, "http://cache/registered-organization-classification-codes/")
|
||||
end
|
||||
|
||||
match "/worship-administrative-units/*path", %{ accept: [:json], layer: :api} do
|
||||
Proxy.forward conn, path, "http://cache/worship-administrative-units/"
|
||||
match "/worship-administrative-units/*path", %{accept: [:json], layer: :api} do
|
||||
Proxy.forward(conn, path, "http://cache/worship-administrative-units/")
|
||||
end
|
||||
|
||||
match "/worship-services/*path", %{ accept: [:json], layer: :api} do
|
||||
Proxy.forward conn, path, "http://cache/worship-services/"
|
||||
match "/worship-services/*path", %{accept: [:json], layer: :api} do
|
||||
Proxy.forward(conn, path, "http://cache/worship-services/")
|
||||
end
|
||||
|
||||
match "/recognized-worship-types/*path", %{ accept: [:json], layer: :api} do
|
||||
Proxy.forward conn, path, "http://cache/recognized-worship-types/"
|
||||
match "/recognized-worship-types/*path", %{accept: [:json], layer: :api} do
|
||||
Proxy.forward(conn, path, "http://cache/recognized-worship-types/")
|
||||
end
|
||||
|
||||
match "/central-worship-services/*path", %{ accept: [:json], layer: :api} do
|
||||
Proxy.forward conn, path, "http://cache/central-worship-services/"
|
||||
match "/central-worship-services/*path", %{accept: [:json], layer: :api} do
|
||||
Proxy.forward(conn, path, "http://cache/central-worship-services/")
|
||||
end
|
||||
|
||||
match "/representative-bodies/*path", %{ accept: [:json], layer: :api} do
|
||||
Proxy.forward conn, path, "http://cache/representative-bodies/"
|
||||
match "/representative-bodies/*path", %{accept: [:json], layer: :api} do
|
||||
Proxy.forward(conn, path, "http://cache/representative-bodies/")
|
||||
end
|
||||
|
||||
match "/governing-bodies/*path", %{ accept: [:json], layer: :api} do
|
||||
Proxy.forward conn, path, "http://cache/governing-bodies/"
|
||||
match "/governing-bodies/*path", %{accept: [:json], layer: :api} do
|
||||
Proxy.forward(conn, path, "http://cache/governing-bodies/")
|
||||
end
|
||||
|
||||
match "/governing-body-classification-codes/*path", %{ accept: [:json], layer: :api} do
|
||||
Proxy.forward conn, path, "http://cache/governing-body-classification-codes/"
|
||||
match "/governing-body-classification-codes/*path", %{accept: [:json], layer: :api} do
|
||||
Proxy.forward(conn, path, "http://cache/governing-body-classification-codes/")
|
||||
end
|
||||
|
||||
match "/local-involvements/*path", %{ accept: [:json], layer: :api} do
|
||||
Proxy.forward conn, path, "http://cache/local-involvements/"
|
||||
match "/local-involvements/*path", %{accept: [:json], layer: :api} do
|
||||
Proxy.forward(conn, path, "http://cache/local-involvements/")
|
||||
end
|
||||
|
||||
match "/identifiers/*path", %{ accept: [:json], layer: :api} do
|
||||
Proxy.forward conn, path, "http://cache/identifiers/"
|
||||
match "/identifiers/*path", %{accept: [:json], layer: :api} do
|
||||
Proxy.forward(conn, path, "http://cache/identifiers/")
|
||||
end
|
||||
|
||||
match "/structured-identifiers/*path", %{ accept: [:json], layer: :api} do
|
||||
Proxy.forward conn, path, "http://cache/structured-identifiers/"
|
||||
match "/structured-identifiers/*path", %{accept: [:json], layer: :api} do
|
||||
Proxy.forward(conn, path, "http://cache/structured-identifiers/")
|
||||
end
|
||||
|
||||
match "/addresses/*path", %{ accept: [:json], layer: :api} do
|
||||
Proxy.forward conn, path, "http://cache/addresses/"
|
||||
match "/addresses/*path", %{accept: [:json], layer: :api} do
|
||||
Proxy.forward(conn, path, "http://cache/addresses/")
|
||||
end
|
||||
|
||||
match "/sites/*path", %{ accept: [:json], layer: :api} do
|
||||
Proxy.forward conn, path, "http://cache/sites/"
|
||||
match "/sites/*path", %{accept: [:json], layer: :api} do
|
||||
Proxy.forward(conn, path, "http://cache/sites/")
|
||||
end
|
||||
|
||||
match "/change-events/*path", %{ accept: [:json], layer: :api} do
|
||||
Proxy.forward conn, path, "http://cache/change-events/"
|
||||
match "/change-events/*path", %{accept: [:json], layer: :api} do
|
||||
Proxy.forward(conn, path, "http://cache/change-events/")
|
||||
end
|
||||
|
||||
match "/change-event-types/*path", %{ accept: [:json], layer: :api} do
|
||||
Proxy.forward conn, path, "http://cache/change-event-types/"
|
||||
match "/change-event-types/*path", %{accept: [:json], layer: :api} do
|
||||
Proxy.forward(conn, path, "http://cache/change-event-types/")
|
||||
end
|
||||
|
||||
match "/change-event-results/*path", %{ accept: [:json], layer: :api} do
|
||||
Proxy.forward conn, path, "http://cache/change-event-results/"
|
||||
match "/change-event-results/*path", %{accept: [:json], layer: :api} do
|
||||
Proxy.forward(conn, path, "http://cache/change-event-results/")
|
||||
end
|
||||
|
||||
match "/organization-status-codes/*path", %{ accept: [:json], layer: :api} do
|
||||
Proxy.forward conn, path, "http://cache/organization-status-codes/"
|
||||
match "/organization-status-codes/*path", %{accept: [:json], layer: :api} do
|
||||
Proxy.forward(conn, path, "http://cache/organization-status-codes/")
|
||||
end
|
||||
|
||||
match "/locations/*path", %{ accept: [:json], layer: :api} do
|
||||
Proxy.forward conn, path, "http://cache/locations/"
|
||||
match "/locations/*path", %{accept: [:json], layer: :api} do
|
||||
Proxy.forward(conn, path, "http://cache/locations/")
|
||||
end
|
||||
|
||||
match "/involvement-types/*path", %{ accept: [:json], layer: :api} do
|
||||
Proxy.forward conn, path, "http://cache/involvement-types/"
|
||||
match "/involvement-types/*path", %{accept: [:json], layer: :api} do
|
||||
Proxy.forward(conn, path, "http://cache/involvement-types/")
|
||||
end
|
||||
|
||||
match "/ministers/*path", %{ accept: [:json], layer: :api} do
|
||||
Proxy.forward conn, path, "http://cache/ministers/"
|
||||
match "/ministers/*path", %{accept: [:json], layer: :api} do
|
||||
Proxy.forward(conn, path, "http://cache/ministers/")
|
||||
end
|
||||
|
||||
match "/minister-conditions/*path", %{ accept: [:json], layer: :api} do
|
||||
Proxy.forward conn, path, "http://cache/minister-conditions/"
|
||||
match "/minister-conditions/*path", %{accept: [:json], layer: :api} do
|
||||
Proxy.forward(conn, path, "http://cache/minister-conditions/")
|
||||
end
|
||||
|
||||
match "/dates-of-birth/*path", %{ accept: [:json], layer: :api} do
|
||||
Proxy.forward conn, path, "http://cache/dates-of-birth/"
|
||||
match "/dates-of-birth/*path", %{accept: [:json], layer: :api} do
|
||||
Proxy.forward(conn, path, "http://cache/dates-of-birth/")
|
||||
end
|
||||
|
||||
match "/nationalities/*path", %{ accept: [:json], layer: :api} do
|
||||
Proxy.forward conn, path, "http://cache/nationalities/"
|
||||
match "/nationalities/*path", %{accept: [:json], layer: :api} do
|
||||
Proxy.forward(conn, path, "http://cache/nationalities/")
|
||||
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 "/gender-codes/*path", %{accept: [:json], layer: :api} do
|
||||
Proxy.forward(conn, path, "http://cache/gender-codes/")
|
||||
end
|
||||
|
||||
match "/minister-positions/*path", %{ accept: [:json], layer: :api} do
|
||||
Proxy.forward conn, path, "http://cache/minister-positions/"
|
||||
match "/concepts/*path", %{accept: [:json], layer: :api} do
|
||||
Proxy.forward(conn, path, "http://cache/concepts/")
|
||||
end
|
||||
|
||||
match "/minister-position-functions/*path", %{ accept: [:json], layer: :api} do
|
||||
Proxy.forward conn, path, "http://cache/minister-position-functions/"
|
||||
match "/minister-positions/*path", %{accept: [:json], layer: :api} do
|
||||
Proxy.forward(conn, path, "http://cache/minister-positions/")
|
||||
end
|
||||
|
||||
match "/financing-codes/*path", %{ accept: [:json], layer: :api} do
|
||||
Proxy.forward conn, path, "http://cache/financing-codes/"
|
||||
match "/minister-position-functions/*path", %{accept: [:json], layer: :api} do
|
||||
Proxy.forward(conn, path, "http://cache/minister-position-functions/")
|
||||
end
|
||||
|
||||
match "/minister-condition-criterions/*path", %{ accept: [:json], layer: :api} do
|
||||
Proxy.forward conn, path, "http://cache/minister-condition-criterions/"
|
||||
match "/financing-codes/*path", %{accept: [:json], layer: :api} do
|
||||
Proxy.forward(conn, path, "http://cache/financing-codes/")
|
||||
end
|
||||
|
||||
match "/document-types-criterions/*path", %{ accept: [:json], layer: :api} do
|
||||
Proxy.forward conn, path, "http://cache/document-types-criterions/"
|
||||
match "/minister-condition-criterions/*path", %{accept: [:json], layer: :api} do
|
||||
Proxy.forward(conn, path, "http://cache/minister-condition-criterions/")
|
||||
end
|
||||
|
||||
match "/site-types/*path", %{ accept: [:json], layer: :api} do
|
||||
Proxy.forward conn, path, "http://cache/site-types/"
|
||||
match "/document-types-criterions/*path", %{accept: [:json], layer: :api} do
|
||||
Proxy.forward(conn, path, "http://cache/document-types-criterions/")
|
||||
end
|
||||
|
||||
match "/request-reasons/*path", %{ accept: [:json], layer: :api} do
|
||||
Proxy.forward conn, path, "http://cache/request-reasons/"
|
||||
match "/site-types/*path", %{accept: [:json], layer: :api} do
|
||||
Proxy.forward(conn, path, "http://cache/site-types/")
|
||||
end
|
||||
|
||||
match "/decisions/*path", %{ accept: [:json], layer: :api} do
|
||||
Proxy.forward conn, path, "http://cache/decisions/"
|
||||
match "/request-reasons/*path", %{accept: [:json], layer: :api} do
|
||||
Proxy.forward(conn, path, "http://cache/request-reasons/")
|
||||
end
|
||||
|
||||
match "/decision-activities/*path", %{ accept: [:json], layer: :api} do
|
||||
Proxy.forward conn, path, "http://cache/decision-activities/"
|
||||
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/"
|
||||
match "/kbo-organizations/*path", %{accept: [:any], layer: :api} do
|
||||
Proxy.forward(conn, path, "http://resource/kbo-organizations/")
|
||||
end
|
||||
|
||||
# Dashboard
|
||||
match "/jobs/*path", %{accept: [:json], layer: :api} do
|
||||
Proxy.forward(conn, path, "http://cache/jobs/")
|
||||
end
|
||||
|
||||
match "/tasks/*path", %{accept: [:json], layer: :api} do
|
||||
Proxy.forward(conn, path, "http://cache/tasks/")
|
||||
end
|
||||
|
||||
match "/data-containers/*path", %{accept: [:json], layer: :api} do
|
||||
Proxy.forward(conn, path, "http://cache/data-containers/")
|
||||
end
|
||||
|
||||
match "/job-errors/*path", %{accept: [:json], layer: :api} do
|
||||
Proxy.forward(conn, path, "http://cache/job-errors/")
|
||||
end
|
||||
|
||||
match "/reports/*path", %{accept: [:json], layer: :api} do
|
||||
Proxy.forward(conn, path, "http://resource/reports/")
|
||||
end
|
||||
|
||||
match "/log-entries/*path", %{accept: [:json], layer: :api} do
|
||||
Proxy.forward(conn, path, "http://resource/log-entries/")
|
||||
end
|
||||
|
||||
match "/log-levels/*path", %{accept: [:json], layer: :api} do
|
||||
Proxy.forward(conn, path, "http://resource/log-levels/")
|
||||
end
|
||||
|
||||
match "/status-codes/*path", %{accept: [:json], layer: :api} do
|
||||
Proxy.forward(conn, path, "http://resource/status-codes/")
|
||||
end
|
||||
|
||||
match "/log-sources/*path", %{accept: [:json], layer: :api} do
|
||||
Proxy.forward(conn, path, "http://resource/log-sources/")
|
||||
end
|
||||
|
||||
match "/remote-data-objects/*path", %{accept: [:json], layer: :api} do
|
||||
Proxy.forward(conn, path, "http://resource/remote-data-objects/")
|
||||
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", %{ reverse_host: ["dashboard" | _rest] } do
|
||||
Proxy.forward conn, path, "http://login-dashboard/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
|
||||
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 "/construct-organization-relationships/*path", %{ layer: :api_services, accept: %{ json: true } } do
|
||||
forward conn, path, "http://construct-organization-relationships/create-relationships/"
|
||||
post "/construct-organization-relationships/*path", %{
|
||||
layer: :api_services,
|
||||
accept: %{json: true}
|
||||
} do
|
||||
forward(conn, path, "http://construct-organization-relationships/create-relationships/")
|
||||
end
|
||||
|
||||
post "/kbo-data-sync/*path", %{ layer: :api_services, accept: %{ json: true } } do
|
||||
forward conn, path, "http://kbo-data-sync/sync-kbo-data/"
|
||||
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/"
|
||||
match "/scope-of-operation/*path", %{layer: api_services, accept: %{json: true}} do
|
||||
forward(conn, path, "http://scope-of-operation/")
|
||||
end
|
||||
|
||||
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
|
||||
|
||||
#################################################################
|
||||
@@ -398,44 +470,56 @@ 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/"
|
||||
get "/assets/*path", %{ reverse_host: ["dashboard" | _rest], layer: :api } do
|
||||
forward conn, path, "http://frontend-dashboard/assets/"
|
||||
end
|
||||
|
||||
match "/@appuniversum/*path", %{ layer: :api } do
|
||||
Proxy.forward conn, path, "http://frontend/@appuniversum/"
|
||||
get "/@appuniversum/*path", %{ reverse_host: ["dashboard" | _rest], layer: :api} do
|
||||
forward conn, path, "http://frontend-dashboard/@appuniversum/"
|
||||
end
|
||||
|
||||
match "/*path", %{ accept: [:html], layer: :api } do
|
||||
Proxy.forward conn, [], "http://frontend/index.html"
|
||||
match "/*_path", %{ reverse_host: ["dashboard" | _rest], layer: :api } do
|
||||
# *_path allows a path to be supplied, but will not yield
|
||||
# an error that we don't use the path variable.
|
||||
forward conn, [], "http://frontend-dashboard/index.html"
|
||||
end
|
||||
|
||||
match "/*_path", %{ layer: :frontend } do
|
||||
Proxy.forward conn, [], "http://frontend/index.html"
|
||||
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/")
|
||||
end
|
||||
|
||||
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")
|
||||
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
|
||||
|
||||
@@ -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
|
||||
};
|
||||
@@ -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
|
||||
};
|
||||
@@ -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
|
||||
};
|
||||
@@ -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,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,18 @@
|
||||
DELETE {
|
||||
GRAPH <http://mu.semte.ch/graphs/public> {
|
||||
?s <http://www.w3.org/2004/02/skos/core#prefLabel> ?label
|
||||
}
|
||||
}
|
||||
INSERT {
|
||||
GRAPH <http://mu.semte.ch/graphs/public> {
|
||||
?s <http://www.w3.org/2004/02/skos/core#prefLabel> "VVMW".
|
||||
}
|
||||
}
|
||||
WHERE {
|
||||
VALUES ?s {
|
||||
<http://data.vlaanderen.be/id/concept/BestuurseenheidClassificatieCode/cc4e2d67-603b-4784-9b61-e50bac1ec089>
|
||||
}
|
||||
GRAPH <http://mu.semte.ch/graphs/public> {
|
||||
?s <http://www.w3.org/2004/02/skos/core#prefLabel> ?label.
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
DELETE {
|
||||
GRAPH <http://mu.semte.ch/graphs/public> {
|
||||
?s <http://www.w3.org/2004/02/skos/core#prefLabel> ?label
|
||||
}
|
||||
}
|
||||
INSERT {
|
||||
GRAPH <http://mu.semte.ch/graphs/public> {
|
||||
?s <http://www.w3.org/2004/02/skos/core#prefLabel> "OCMW vereniging".
|
||||
}
|
||||
}
|
||||
WHERE {
|
||||
VALUES ?s {
|
||||
<http://data.vlaanderen.be/id/concept/BestuurseenheidClassificatieCode/cc4e2d67-603b-4784-9b61-e50bac1ec089>
|
||||
}
|
||||
GRAPH <http://mu.semte.ch/graphs/public> {
|
||||
?s <http://www.w3.org/2004/02/skos/core#prefLabel> ?label.
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
PREFIX regorg: <http://www.w3.org/ns/regorg#>
|
||||
|
||||
DELETE {
|
||||
GRAPH <http://mu.semte.ch/graphs/worship-service> {
|
||||
?s regorg:orgStatus ?activeStatus.
|
||||
}
|
||||
} INSERT {
|
||||
GRAPH <http://mu.semte.ch/graphs/worship-service> {
|
||||
?s regorg:orgStatus ?notActiveStatus.
|
||||
}
|
||||
} WHERE {
|
||||
VALUES ?s {
|
||||
<http://data.lblod.info/id/centraleBesturenVanDeEredienst/ed0914f40dfed83ca44af845a2bf4d81>
|
||||
<http://data.lblod.info/id/centraleBesturenVanDeEredienst/9e0e8f060ca954da6263243642433f44>
|
||||
<http://data.lblod.info/id/centraleBesturenVanDeEredienst/b93ae92a8eb4912125094d98b8b4841d>
|
||||
<http://data.lblod.info/id/centraleBesturenVanDeEredienst/988321712204bd0104fb62e6f5dbe104>
|
||||
<http://data.lblod.info/id/centraleBesturenVanDeEredienst/70e058024a3cd58f76005d645b892e01>
|
||||
<http://data.lblod.info/id/centraleBesturenVanDeEredienst/cf4add06db226861767559753fb50206>
|
||||
<http://data.lblod.info/id/centraleBesturenVanDeEredienst/5442c1374ed159347bc0c64518a9b1a9>
|
||||
}
|
||||
BIND (<http://lblod.data.gift/concepts/d02c4e12bf88d2fdf5123b07f29c9311> AS ?notActiveStatus)
|
||||
BIND (<http://lblod.data.gift/concepts/63cc561de9188d64ba5840a42ae8f0d6> AS ?activeStatus)
|
||||
}
|
||||
|
||||
;
|
||||
|
||||
DELETE {
|
||||
GRAPH <http://mu.semte.ch/graphs/worship-service> {
|
||||
?s regorg:orgStatus ?notActiveStatus.
|
||||
}
|
||||
} INSERT {
|
||||
GRAPH <http://mu.semte.ch/graphs/worship-service> {
|
||||
?s regorg:orgStatus ?activeStatus.
|
||||
}
|
||||
} WHERE {
|
||||
VALUES ?s {
|
||||
<http://data.lblod.info/id/centraleBesturenVanDeEredienst/e12c4f9f7167cd0074a97a2f658d1d51>
|
||||
|
||||
}
|
||||
BIND (<http://lblod.data.gift/concepts/d02c4e12bf88d2fdf5123b07f29c9311> AS ?notActiveStatus)
|
||||
BIND (<http://lblod.data.gift/concepts/63cc561de9188d64ba5840a42ae8f0d6> AS ?activeStatus)
|
||||
}
|
||||
@@ -0,0 +1,55 @@
|
||||
PREFIX org: <http://www.w3.org/ns/org#>
|
||||
PREFIX mu: <http://mu.semte.ch/vocabularies/core/>
|
||||
|
||||
INSERT {
|
||||
GRAPH <http://mu.semte.ch/graphs/worship-service> {
|
||||
?activeOrg
|
||||
<http://www.w3.org/ns/org#hasSubOrganization> ?sub .
|
||||
|
||||
?membership a org:Membership ;
|
||||
mu:uuid ?uuid ;
|
||||
org:organization ?activeOrg ;
|
||||
org:member ?sub ;
|
||||
org:role <http://data.lblod.info/id/rollen/4ec7d5c39bdc4e84b4174379b9e22ad8> .
|
||||
}
|
||||
}
|
||||
WHERE {
|
||||
BIND(<http://data.lblod.info/id/centraleBesturenVanDeEredienst/643ddbd9448ca43828702527af7bfbb8> AS ?inactiveOrg)
|
||||
BIND(<http://data.lblod.info/id/centraleBesturenVanDeEredienst/7f5475cfb202d12f54779f046441c9e1> AS ?activeOrg)
|
||||
|
||||
GRAPH <http://mu.semte.ch/graphs/worship-service> {
|
||||
?inactiveOrg
|
||||
<http://www.w3.org/ns/org#hasSubOrganization> ?sub .
|
||||
}
|
||||
|
||||
FILTER NOT EXISTS {
|
||||
?activeOrg
|
||||
<http://www.w3.org/ns/org#hasSubOrganization> ?sub .
|
||||
}
|
||||
|
||||
BIND(SHA1(CONCAT(STR(?activeOrg), STR(?sub), "sub organization")) as ?uuid)
|
||||
BIND(IRI(CONCAT("http://data.lblod.info/id/lidmaatschap/", ?uuid)) AS ?membership)
|
||||
}
|
||||
|
||||
;
|
||||
|
||||
DELETE {
|
||||
GRAPH <http://mu.semte.ch/graphs/worship-service> {
|
||||
?inactiveOrg
|
||||
<http://www.w3.org/ns/org#hasSubOrganization> ?sub .
|
||||
|
||||
?membership ?membershipP ?membershipO .
|
||||
}
|
||||
}
|
||||
WHERE {
|
||||
BIND(<http://data.lblod.info/id/centraleBesturenVanDeEredienst/643ddbd9448ca43828702527af7bfbb8> AS ?inactiveOrg)
|
||||
|
||||
GRAPH <http://mu.semte.ch/graphs/worship-service> {
|
||||
?inactiveOrg
|
||||
<http://www.w3.org/ns/org#hasSubOrganization> ?sub .
|
||||
|
||||
?membership a org:Membership ;
|
||||
org:organization ?inactiveOrg ;
|
||||
?membershipP ?membershipO .
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
PREFIX regorg: <http://www.w3.org/ns/regorg#>
|
||||
|
||||
DELETE {
|
||||
GRAPH <http://mu.semte.ch/graphs/worship-service> {
|
||||
?s regorg:orgStatus ?activeStatus.
|
||||
}
|
||||
} INSERT {
|
||||
GRAPH <http://mu.semte.ch/graphs/worship-service> {
|
||||
?s regorg:orgStatus ?notActiveStatus.
|
||||
}
|
||||
} WHERE {
|
||||
VALUES ?s {
|
||||
<http://data.lblod.info/id/besturenVanDeEredienst/b1dbb9effdedef39bc4f0c8d96197cfd>
|
||||
}
|
||||
BIND (<http://lblod.data.gift/concepts/d02c4e12bf88d2fdf5123b07f29c9311> AS ?notActiveStatus)
|
||||
BIND (<http://lblod.data.gift/concepts/63cc561de9188d64ba5840a42ae8f0d6> AS ?activeStatus)
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
PREFIX regorg: <http://www.w3.org/ns/regorg#>
|
||||
|
||||
DELETE {
|
||||
GRAPH <http://mu.semte.ch/graphs/worship-service> {
|
||||
?s regorg:orgStatus ?notActiveStatus.
|
||||
}
|
||||
} INSERT {
|
||||
GRAPH <http://mu.semte.ch/graphs/worship-service> {
|
||||
?s regorg:orgStatus ?activeStatus.
|
||||
}
|
||||
} WHERE {
|
||||
VALUES ?s {
|
||||
<http://data.lblod.info/id/besturenVanDeEredienst/45596b602140f031237b0ec26a8d4718>
|
||||
}
|
||||
BIND (<http://lblod.data.gift/concepts/d02c4e12bf88d2fdf5123b07f29c9311> AS ?notActiveStatus)
|
||||
BIND (<http://lblod.data.gift/concepts/63cc561de9188d64ba5840a42ae8f0d6> AS ?activeStatus)
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
|
||||
PREFIX prov: <http://www.w3.org/ns/prov#>
|
||||
|
||||
DELETE {
|
||||
GRAPH <http://mu.semte.ch/graphs/public> {
|
||||
?scope rdfs:label ?oldLabel .
|
||||
}
|
||||
} INSERT {
|
||||
GRAPH <http://mu.semte.ch/graphs/public> {
|
||||
?scope rdfs:label ?newLabel .
|
||||
}
|
||||
} WHERE {
|
||||
GRAPH <http://mu.semte.ch/graphs/public> {
|
||||
?scope a prov:Location ;
|
||||
rdfs:label ?oldLabel .
|
||||
VALUES (?scope ?newLabel) {
|
||||
(<http://data.lblod.info/id/werkingsgebieden/1f5dd7043ad54d07751da8689d5b47ad9ae0e52dccce8f00cc8debab35f8e2b2> "Bilzen-Hoeselt")
|
||||
(<http://data.lblod.info/id/werkingsgebieden/fc34bb0a1dbf157ac5e5f8e657dd774210f03d2efa21370dd3b9a6342906c7ab> "Tessenderlo-Ham")
|
||||
(<http://data.lblod.info/id/werkingsgebieden/fabec9e745fc9efa32afadd8b7268938805b9679dcf3b032c9b9a9a3530d6b59> "Tongeren-Borgloon")
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,38 @@
|
||||
DELETE {
|
||||
GRAPH <http://mu.semte.ch/graphs/worship-service> {
|
||||
?s <http://www.w3.org/ns/locn#adminUnitL2> ?province ;
|
||||
<https://data.vlaanderen.be/ns/adres#adresIsGelegenIn> ?werkingsgebied .
|
||||
}
|
||||
} WHERE {
|
||||
GRAPH <http://mu.semte.ch/graphs/worship-service> {
|
||||
VALUES ?postCode {
|
||||
"1070"
|
||||
"1000"
|
||||
"1020"
|
||||
"1120"
|
||||
"1130"
|
||||
"1050"
|
||||
"1040"
|
||||
"1140"
|
||||
"1083"
|
||||
"1090"
|
||||
"1081"
|
||||
"1160"
|
||||
"1030"
|
||||
"1082"
|
||||
"1060"
|
||||
"1080"
|
||||
"1210"
|
||||
"1200"
|
||||
"1150"
|
||||
"1180"
|
||||
"1190"
|
||||
"1170"
|
||||
}
|
||||
|
||||
?s a <http://www.w3.org/ns/locn#Address> ;
|
||||
<http://www.w3.org/ns/locn#postCode> ?postCode ;
|
||||
<http://www.w3.org/ns/locn#adminUnitL2> ?province ;
|
||||
<https://data.vlaanderen.be/ns/adres#adresIsGelegenIn> ?werkingsgebied .
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,78 @@
|
||||
INSERT DATA {
|
||||
GRAPH <http://mu.semte.ch/graphs/public> {
|
||||
<http://data.lblod.info/id/werkingsgebieden/1c491c48-643f-44c3-bdd8-2ba8f11f4d5d>
|
||||
a <http://www.w3.org/ns/prov#Location> ;
|
||||
<http://mu.semte.ch/vocabularies/core/uuid> "1c491c48-643f-44c3-bdd8-2ba8f11f4d5d" ;
|
||||
<http://www.w3.org/2000/01/rdf-schema#label> "Anderlecht" ;
|
||||
<http://mu.semte.ch/vocabularies/ext/werkingsgebiedNiveau> "Gemeente" ;
|
||||
<http://www.w3.org/2004/02/skos/core#exactMatch> <http://vocab.belgif.be/auth/refnis2025/21001> .
|
||||
}
|
||||
|
||||
GRAPH <http://mu.semte.ch/graphs/shared> {
|
||||
<https://data.vlaanderen.be/id/organisatie/OVO025866>
|
||||
a <http://www.w3.org/ns/org#Organization> ,
|
||||
<http://data.vlaanderen.be/ns/besluit#Bestuurseenheid> ,
|
||||
<http://purl.org/dc/terms/Agent> ;
|
||||
<http://mu.semte.ch/vocabularies/core/uuid> "1e912379-eeab-4d33-8f6c-2e160e230dab" ;
|
||||
<http://www.w3.org/ns/org#classification> <http://data.vlaanderen.be/id/concept/BestuurseenheidClassificatieCode/5ab0e9b8a3b2ca7c5e000001> ;
|
||||
<http://www.w3.org/2004/02/skos/core#prefLabel> "Anderlecht" ;
|
||||
<http://www.w3.org/ns/regorg#legalName> "Anderlecht" ;
|
||||
<http://www.w3.org/ns/regorg#orgStatus> <http://lblod.data.gift/concepts/63cc561de9188d64ba5840a42ae8f0d6> .
|
||||
}
|
||||
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
<https://data.vlaanderen.be/id/organisatie/OVO025866>
|
||||
<http://data.vlaanderen.be/ns/besluit#werkingsgebied> <http://data.lblod.info/id/werkingsgebieden/1c491c48-643f-44c3-bdd8-2ba8f11f4d5d> ;
|
||||
<http://www.w3.org/ns/adms#identifier> <http://data.lblod.info/id/identificatoren/d422793b-ee14-4c49-9633-2460a2bd5597> ;
|
||||
<http://www.w3.org/ns/adms#identifier> <http://data.lblod.info/id/identificatoren/55f5718e-753d-4bf5-9e54-51107cb0233e> ;
|
||||
<http://www.w3.org/ns/org#hasPrimarySite> <http://data.lblod.info/id/vestigingen/dbd1ab23-f6c8-40eb-92c1-ad96768581be> ;
|
||||
<http://purl.org/dc/terms/source> <https://data.vlaanderen.be/doc/organisatie> .
|
||||
|
||||
<http://data.lblod.info/id/identificatoren/d422793b-ee14-4c49-9633-2460a2bd5597>
|
||||
<https://data.vlaanderen.be/ns/generiek#gestructureerdeIdentificator> <http://data.lblod.info/id/gestructureerdeIdentificator/6a614bee-ce07-44ae-b9b8-6c62b5d59f03>;
|
||||
a <http://www.w3.org/ns/adms#Identifier> ;
|
||||
<http://www.w3.org/2004/02/skos/core#notation> "KBO nummer" ;
|
||||
<http://mu.semte.ch/vocabularies/core/uuid> "d422793b-ee14-4c49-9633-2460a2bd5597" .
|
||||
|
||||
<http://data.lblod.info/id/gestructureerdeIdentificator/6a614bee-ce07-44ae-b9b8-6c62b5d59f03>
|
||||
a <https://data.vlaanderen.be/ns/generiek#GestructureerdeIdentificator> ;
|
||||
<https://data.vlaanderen.be/ns/generiek#lokaleIdentificator> "0206582284" ;
|
||||
<http://mu.semte.ch/vocabularies/core/uuid> "6a614bee-ce07-44ae-b9b8-6c62b5d59f03" .
|
||||
|
||||
<http://data.lblod.info/id/identificatoren/55f5718e-753d-4bf5-9e54-51107cb0233e>
|
||||
<https://data.vlaanderen.be/ns/generiek#gestructureerdeIdentificator> <http://data.lblod.info/id/gestructureerdeIdentificator/d78905a7-c997-4faa-a431-0fc536e5c13c>;
|
||||
a <http://www.w3.org/ns/adms#Identifier> ;
|
||||
<http://www.w3.org/2004/02/skos/core#notation> "OVO-nummer" ;
|
||||
<http://mu.semte.ch/vocabularies/core/uuid> "55f5718e-753d-4bf5-9e54-51107cb0233e" .
|
||||
|
||||
<http://data.lblod.info/id/gestructureerdeIdentificator/d78905a7-c997-4faa-a431-0fc536e5c13c>
|
||||
a <https://data.vlaanderen.be/ns/generiek#GestructureerdeIdentificator> ;
|
||||
<https://data.vlaanderen.be/ns/generiek#lokaleIdentificator> "OVO025866" ;
|
||||
<http://mu.semte.ch/vocabularies/core/uuid> "d78905a7-c997-4faa-a431-0fc536e5c13c" .
|
||||
|
||||
<http://data.lblod.info/id/vestigingen/dbd1ab23-f6c8-40eb-92c1-ad96768581be>
|
||||
a <http://www.w3.org/ns/org#Site> ;
|
||||
<http://mu.semte.ch/vocabularies/core/uuid> "dbd1ab23-f6c8-40eb-92c1-ad96768581be" ;
|
||||
<http://data.lblod.info/vocabularies/erediensten/vestigingstype> <http://lblod.data.gift/concepts/f1381723dec42c0b6ba6492e41d6f5dd> ;
|
||||
<http://www.w3.org/ns/org#siteAddress> <http://data.lblod.info/id/contact-punten/0a39a310-4e93-4443-989c-1ea630f82033> ;
|
||||
<https://data.vlaanderen.be/ns/organisatie#bestaatUit> <http://data.lblod.info/id/adressen/cc216687-6049-41ae-8fd7-6757117e0e16> .
|
||||
|
||||
<http://data.lblod.info/id/contact-punten/0a39a310-4e93-4443-989c-1ea630f82033>
|
||||
a <http://schema.org/ContactPoint> ;
|
||||
<http://mu.semte.ch/vocabularies/core/uuid> "0a39a310-4e93-4443-989c-1ea630f82033" ;
|
||||
<http://schema.org/email> "info@anderlecht.brussels" ;
|
||||
<http://schema.org/telephone> "tel:+3225580800" ;
|
||||
<http://schema.org/contactType> "Primary" ;
|
||||
<http://xmlns.com/foaf/0.1/page> "https://www.anderlecht.be/" .
|
||||
|
||||
<http://data.lblod.info/id/adressen/cc216687-6049-41ae-8fd7-6757117e0e16>
|
||||
a <http://www.w3.org/ns/locn#Address> ;
|
||||
<http://mu.semte.ch/vocabularies/core/uuid> "cc216687-6049-41ae-8fd7-6757117e0e16" ;
|
||||
<https://data.vlaanderen.be/ns/adres#gemeentenaam> "Anderlecht" ;
|
||||
<https://data.vlaanderen.be/ns/adres#land> "België" ;
|
||||
<https://data.vlaanderen.be/ns/adres#Adresvoorstelling.huisnummer> "1" ;
|
||||
<http://www.w3.org/ns/locn#fullAddress> "Raadsplein 1, 1070 Anderlecht, België" ;
|
||||
<http://www.w3.org/ns/locn#postCode> "1070" ;
|
||||
<http://www.w3.org/ns/locn#thoroughfare> "Raadsplein" .
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,92 @@
|
||||
INSERT DATA {
|
||||
GRAPH <http://mu.semte.ch/graphs/public> {
|
||||
<http://data.lblod.info/id/werkingsgebieden/fb36ff92-84b7-4d90-b32c-f7b7815b7711>
|
||||
a <http://www.w3.org/ns/prov#Location> ;
|
||||
<http://mu.semte.ch/vocabularies/core/uuid> "fb36ff92-84b7-4d90-b32c-f7b7815b7711" ;
|
||||
<http://www.w3.org/2000/01/rdf-schema#label> "Brussel" ;
|
||||
<http://mu.semte.ch/vocabularies/ext/werkingsgebiedNiveau> "Gemeente" ;
|
||||
<http://www.w3.org/2004/02/skos/core#exactMatch> <http://vocab.belgif.be/auth/refnis2025/21004> .
|
||||
}
|
||||
|
||||
GRAPH <http://mu.semte.ch/graphs/shared> {
|
||||
<https://data.vlaanderen.be/id/organisatie/OVO008216>
|
||||
a <http://www.w3.org/ns/org#Organization> ,
|
||||
<http://data.vlaanderen.be/ns/besluit#Bestuurseenheid> ,
|
||||
<http://purl.org/dc/terms/Agent> ;
|
||||
<http://mu.semte.ch/vocabularies/core/uuid> "3d6f7cfe-43e3-4b87-bb2f-0bd8c497ab33" ;
|
||||
<http://www.w3.org/ns/org#classification> <http://data.vlaanderen.be/id/concept/BestuurseenheidClassificatieCode/5ab0e9b8a3b2ca7c5e000001> ;
|
||||
<http://www.w3.org/2004/02/skos/core#prefLabel> "Brussel" ;
|
||||
<http://www.w3.org/ns/regorg#legalName> "Brussel" ;
|
||||
<http://www.w3.org/ns/regorg#orgStatus> <http://lblod.data.gift/concepts/63cc561de9188d64ba5840a42ae8f0d6> .
|
||||
}
|
||||
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
<https://data.vlaanderen.be/id/organisatie/OVO008216>
|
||||
<http://data.vlaanderen.be/ns/besluit#werkingsgebied> <http://data.lblod.info/id/werkingsgebieden/fb36ff92-84b7-4d90-b32c-f7b7815b7711> ;
|
||||
<http://www.w3.org/ns/adms#identifier> <http://data.lblod.info/id/identificatoren/49127169-aff3-44a3-8982-658e4055eef4> ;
|
||||
<http://www.w3.org/ns/adms#identifier> <http://data.lblod.info/id/identificatoren/3c8dd5c2-7a40-4b44-bc1d-cc9a93340159> ;
|
||||
<http://www.w3.org/ns/org#hasPrimarySite> <http://data.lblod.info/id/vestigingen/d842785a-5684-4573-8248-57bf8c1f38bd> ;
|
||||
<http://purl.org/dc/terms/source> <https://data.vlaanderen.be/doc/organisatie> .
|
||||
|
||||
<http://data.lblod.info/id/veranderingsgebeurtenissen/7a48ea24-5557-420a-bdd0-712d05309ab7>
|
||||
a <http://www.w3.org/ns/org#ChangeEvent> ;
|
||||
<http://mu.semte.ch/vocabularies/core/uuid> "7a48ea24-5557-420a-bdd0-712d05309ab7" ;
|
||||
<http://data.lblod.info/vocabularies/contacthub/typeWijziging> <http://lblod.data.gift/concepts/e4c3d1ef-a34d-43b0-a18c-f4e60e2c8af3> ;
|
||||
<http://www.w3.org/ns/org#originalOrganization> <https://data.vlaanderen.be/id/organisatie/OVO008216> ;
|
||||
<http://www.w3.org/ns/org#resultingOrganization> <https://data.vlaanderen.be/id/organisatie/OVO008216> ;
|
||||
<http://lblod.data.gift/vocabularies/organisatie/veranderingsgebeurtenisResultaat> <http://lblod.data.info/id/veranderingsgebeurtenis-resultaten/5dfdca74-05a9-43d4-963e-d5376f668060> .
|
||||
|
||||
<http://lblod.data.info/id/veranderingsgebeurtenis-resultaten/5dfdca74-05a9-43d4-963e-d5376f668060>
|
||||
a <http://lblod.data.gift/vocabularies/organisatie/VeranderingsgebeurtenisResultaat> ;
|
||||
<http://mu.semte.ch/vocabularies/core/uuid> "5dfdca74-05a9-43d4-963e-d5376f668060" ;
|
||||
<http://mu.semte.ch/vocabularies/ext/resultingOrganization> <https://data.vlaanderen.be/id/organisatie/OVO008216> ;
|
||||
<http://lblod.data.gift/vocabularies/organisatie/resulterendeStatus> <http://lblod.data.gift/concepts/63cc561de9188d64ba5840a42ae8f0d6> .
|
||||
|
||||
<http://data.lblod.info/id/identificatoren/49127169-aff3-44a3-8982-658e4055eef4>
|
||||
<https://data.vlaanderen.be/ns/generiek#gestructureerdeIdentificator> <http://data.lblod.info/id/gestructureerdeIdentificator/3005b2ac-b747-4a06-acc1-e66438a702c6>;
|
||||
a <http://www.w3.org/ns/adms#Identifier> ;
|
||||
<http://www.w3.org/2004/02/skos/core#notation> "KBO nummer" ;
|
||||
<http://mu.semte.ch/vocabularies/core/uuid> "49127169-aff3-44a3-8982-658e4055eef4" .
|
||||
|
||||
<http://data.lblod.info/id/gestructureerdeIdentificator/3005b2ac-b747-4a06-acc1-e66438a702c6>
|
||||
a <https://data.vlaanderen.be/ns/generiek#GestructureerdeIdentificator> ;
|
||||
<https://data.vlaanderen.be/ns/generiek#lokaleIdentificator> "0207373429" ;
|
||||
<http://mu.semte.ch/vocabularies/core/uuid> "3005b2ac-b747-4a06-acc1-e66438a702c6" .
|
||||
|
||||
<http://data.lblod.info/id/identificatoren/3c8dd5c2-7a40-4b44-bc1d-cc9a93340159>
|
||||
<https://data.vlaanderen.be/ns/generiek#gestructureerdeIdentificator> <http://data.lblod.info/id/gestructureerdeIdentificator/f33c418d-2dde-45ce-baad-2a7f26a62f4e>;
|
||||
a <http://www.w3.org/ns/adms#Identifier> ;
|
||||
<http://www.w3.org/2004/02/skos/core#notation> "OVO-nummer" ;
|
||||
<http://mu.semte.ch/vocabularies/core/uuid> "3c8dd5c2-7a40-4b44-bc1d-cc9a93340159" .
|
||||
|
||||
<http://data.lblod.info/id/gestructureerdeIdentificator/f33c418d-2dde-45ce-baad-2a7f26a62f4e>
|
||||
a <https://data.vlaanderen.be/ns/generiek#GestructureerdeIdentificator> ;
|
||||
<https://data.vlaanderen.be/ns/generiek#lokaleIdentificator> "OVO008216" ;
|
||||
<http://mu.semte.ch/vocabularies/core/uuid> "f33c418d-2dde-45ce-baad-2a7f26a62f4e" .
|
||||
|
||||
<http://data.lblod.info/id/vestigingen/d842785a-5684-4573-8248-57bf8c1f38bd>
|
||||
a <http://www.w3.org/ns/org#Site> ;
|
||||
<http://mu.semte.ch/vocabularies/core/uuid> "d842785a-5684-4573-8248-57bf8c1f38bd" ;
|
||||
<http://data.lblod.info/vocabularies/erediensten/vestigingstype> <http://lblod.data.gift/concepts/f1381723dec42c0b6ba6492e41d6f5dd> ;
|
||||
<http://www.w3.org/ns/org#siteAddress> <http://data.lblod.info/id/contact-punten/7c3f8a78-ccae-46cd-8d0b-4c551aec1350> ;
|
||||
<https://data.vlaanderen.be/ns/organisatie#bestaatUit> <http://data.lblod.info/id/adressen/2c73b8c1-fc05-4bdc-9439-9afc97d78f43> .
|
||||
|
||||
<http://data.lblod.info/id/contact-punten/7c3f8a78-ccae-46cd-8d0b-4c551aec1350>
|
||||
a <http://schema.org/ContactPoint> ;
|
||||
<http://mu.semte.ch/vocabularies/core/uuid> "7c3f8a78-ccae-46cd-8d0b-4c551aec1350" ;
|
||||
<http://schema.org/email> "europa@brucity.be" ;
|
||||
<http://schema.org/telephone> "tel:+3222792211" ;
|
||||
<http://schema.org/contactType> "Primary" ;
|
||||
<http://xmlns.com/foaf/0.1/page> "https://www.brussel.be/" .
|
||||
|
||||
<http://data.lblod.info/id/adressen/2c73b8c1-fc05-4bdc-9439-9afc97d78f43>
|
||||
a <http://www.w3.org/ns/locn#Address> ;
|
||||
<http://mu.semte.ch/vocabularies/core/uuid> "2c73b8c1-fc05-4bdc-9439-9afc97d78f43" ;
|
||||
<https://data.vlaanderen.be/ns/adres#gemeentenaam> "Brussel" ;
|
||||
<https://data.vlaanderen.be/ns/adres#land> "België" ;
|
||||
<https://data.vlaanderen.be/ns/adres#Adresvoorstelling.huisnummer> "4" ;
|
||||
<http://www.w3.org/ns/locn#fullAddress> "Hallenstraat 4, 1000 Brussel, België" ;
|
||||
<http://www.w3.org/ns/locn#postCode> "1000" ;
|
||||
<http://www.w3.org/ns/locn#thoroughfare> "Hallenstraat" .
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,78 @@
|
||||
INSERT DATA {
|
||||
GRAPH <http://mu.semte.ch/graphs/public> {
|
||||
<http://data.lblod.info/id/werkingsgebieden/331fbb80-ba0a-4a33-95e4-5d2674415c72>
|
||||
a <http://www.w3.org/ns/prov#Location> ;
|
||||
<http://mu.semte.ch/vocabularies/core/uuid> "331fbb80-ba0a-4a33-95e4-5d2674415c72" ;
|
||||
<http://www.w3.org/2000/01/rdf-schema#label> "Elsene" ;
|
||||
<http://mu.semte.ch/vocabularies/ext/werkingsgebiedNiveau> "Gemeente" ;
|
||||
<http://www.w3.org/2004/02/skos/core#exactMatch> <http://vocab.belgif.be/auth/refnis2025/21009> .
|
||||
}
|
||||
|
||||
GRAPH <http://mu.semte.ch/graphs/shared> {
|
||||
<https://data.vlaanderen.be/id/organisatie/OVO025861>
|
||||
a <http://www.w3.org/ns/org#Organization> ,
|
||||
<http://data.vlaanderen.be/ns/besluit#Bestuurseenheid> ,
|
||||
<http://purl.org/dc/terms/Agent> ;
|
||||
<http://mu.semte.ch/vocabularies/core/uuid> "4d892d46-2fda-4c24-89da-d4cdc2ac379d" ;
|
||||
<http://www.w3.org/ns/org#classification> <http://data.vlaanderen.be/id/concept/BestuurseenheidClassificatieCode/5ab0e9b8a3b2ca7c5e000001> ;
|
||||
<http://www.w3.org/2004/02/skos/core#prefLabel> "Elsene" ;
|
||||
<http://www.w3.org/ns/regorg#legalName> "Elsene" ;
|
||||
<http://www.w3.org/ns/regorg#orgStatus> <http://lblod.data.gift/concepts/63cc561de9188d64ba5840a42ae8f0d6> .
|
||||
}
|
||||
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
<https://data.vlaanderen.be/id/organisatie/OVO025861>
|
||||
<http://data.vlaanderen.be/ns/besluit#werkingsgebied> <http://data.lblod.info/id/werkingsgebieden/331fbb80-ba0a-4a33-95e4-5d2674415c72> ;
|
||||
<http://www.w3.org/ns/adms#identifier> <http://data.lblod.info/id/identificatoren/8f918141-e2e8-470c-8edb-fefc45743afb> ;
|
||||
<http://www.w3.org/ns/adms#identifier> <http://data.lblod.info/id/identificatoren/2b39418f-c1c2-4880-b3a9-c6e8911d779b> ;
|
||||
<http://www.w3.org/ns/org#hasPrimarySite> <http://data.lblod.info/id/vestigingen/6fe561e2-76aa-4c99-83e6-083f2c47c7e0> ;
|
||||
<http://purl.org/dc/terms/source> <https://data.vlaanderen.be/doc/organisatie> .
|
||||
|
||||
<http://data.lblod.info/id/identificatoren/8f918141-e2e8-470c-8edb-fefc45743afb>
|
||||
<https://data.vlaanderen.be/ns/generiek#gestructureerdeIdentificator> <http://data.lblod.info/id/gestructureerdeIdentificator/644381f5-cfaa-45ab-bf13-79475359c7f9>;
|
||||
a <http://www.w3.org/ns/adms#Identifier> ;
|
||||
<http://www.w3.org/2004/02/skos/core#notation> "KBO nummer" ;
|
||||
<http://mu.semte.ch/vocabularies/core/uuid> "8f918141-e2e8-470c-8edb-fefc45743afb" .
|
||||
|
||||
<http://data.lblod.info/id/gestructureerdeIdentificator/644381f5-cfaa-45ab-bf13-79475359c7f9>
|
||||
a <https://data.vlaanderen.be/ns/generiek#GestructureerdeIdentificator> ;
|
||||
<https://data.vlaanderen.be/ns/generiek#lokaleIdentificator> "0207401341" ;
|
||||
<http://mu.semte.ch/vocabularies/core/uuid> "644381f5-cfaa-45ab-bf13-79475359c7f9" .
|
||||
|
||||
<http://data.lblod.info/id/identificatoren/2b39418f-c1c2-4880-b3a9-c6e8911d779b>
|
||||
<https://data.vlaanderen.be/ns/generiek#gestructureerdeIdentificator> <http://data.lblod.info/id/gestructureerdeIdentificator/1e5698d7-4299-40de-a1a9-c0e2fa571c27>;
|
||||
a <http://www.w3.org/ns/adms#Identifier> ;
|
||||
<http://www.w3.org/2004/02/skos/core#notation> "OVO-nummer" ;
|
||||
<http://mu.semte.ch/vocabularies/core/uuid> "2b39418f-c1c2-4880-b3a9-c6e8911d779b" .
|
||||
|
||||
<http://data.lblod.info/id/gestructureerdeIdentificator/1e5698d7-4299-40de-a1a9-c0e2fa571c27>
|
||||
a <https://data.vlaanderen.be/ns/generiek#GestructureerdeIdentificator> ;
|
||||
<https://data.vlaanderen.be/ns/generiek#lokaleIdentificator> "OVO025861" ;
|
||||
<http://mu.semte.ch/vocabularies/core/uuid> "1e5698d7-4299-40de-a1a9-c0e2fa571c27" .
|
||||
|
||||
<http://data.lblod.info/id/vestigingen/6fe561e2-76aa-4c99-83e6-083f2c47c7e0>
|
||||
a <http://www.w3.org/ns/org#Site> ;
|
||||
<http://mu.semte.ch/vocabularies/core/uuid> "6fe561e2-76aa-4c99-83e6-083f2c47c7e0" ;
|
||||
<http://data.lblod.info/vocabularies/erediensten/vestigingstype> <http://lblod.data.gift/concepts/f1381723dec42c0b6ba6492e41d6f5dd> ;
|
||||
<http://www.w3.org/ns/org#siteAddress> <http://data.lblod.info/id/contact-punten/b200bda3-74da-4fe6-a384-95cc3b10460c> ;
|
||||
<https://data.vlaanderen.be/ns/organisatie#bestaatUit> <http://data.lblod.info/id/adressen/5ccba902-3d32-4fac-b51f-ad6fa05f9d6c> .
|
||||
|
||||
<http://data.lblod.info/id/contact-punten/b200bda3-74da-4fe6-a384-95cc3b10460c>
|
||||
a <http://schema.org/ContactPoint> ;
|
||||
<http://mu.semte.ch/vocabularies/core/uuid> "b200bda3-74da-4fe6-a384-95cc3b10460c" ;
|
||||
<http://schema.org/email> "secretariaat@elsene.be" ;
|
||||
<http://schema.org/telephone> "tel:+3225156111" ;
|
||||
<http://schema.org/contactType> "Primary" ;
|
||||
<http://xmlns.com/foaf/0.1/page> "https://www.elsene.be/" .
|
||||
|
||||
<http://data.lblod.info/id/adressen/5ccba902-3d32-4fac-b51f-ad6fa05f9d6c>
|
||||
a <http://www.w3.org/ns/locn#Address> ;
|
||||
<http://mu.semte.ch/vocabularies/core/uuid> "5ccba902-3d32-4fac-b51f-ad6fa05f9d6c" ;
|
||||
<https://data.vlaanderen.be/ns/adres#gemeentenaam> "Elsene" ;
|
||||
<https://data.vlaanderen.be/ns/adres#land> "België" ;
|
||||
<https://data.vlaanderen.be/ns/adres#Adresvoorstelling.huisnummer> "168" ;
|
||||
<http://www.w3.org/ns/locn#fullAddress> "Elsense Steenweg 168, 1050 Elsene, België" ;
|
||||
<http://www.w3.org/ns/locn#postCode> "1050" ;
|
||||
<http://www.w3.org/ns/locn#thoroughfare> "Elsense Steenweg" .
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,78 @@
|
||||
INSERT DATA {
|
||||
GRAPH <http://mu.semte.ch/graphs/public> {
|
||||
<http://data.lblod.info/id/werkingsgebieden/2a8f2022-6a4b-421d-a716-7c7f85b3e318>
|
||||
a <http://www.w3.org/ns/prov#Location> ;
|
||||
<http://mu.semte.ch/vocabularies/core/uuid> "2a8f2022-6a4b-421d-a716-7c7f85b3e318" ;
|
||||
<http://www.w3.org/2000/01/rdf-schema#label> "Etterbeek" ;
|
||||
<http://mu.semte.ch/vocabularies/ext/werkingsgebiedNiveau> "Gemeente" ;
|
||||
<http://www.w3.org/2004/02/skos/core#exactMatch> <http://vocab.belgif.be/auth/refnis2025/21005> .
|
||||
}
|
||||
|
||||
GRAPH <http://mu.semte.ch/graphs/shared> {
|
||||
<https://data.vlaanderen.be/id/organisatie/OVO025862>
|
||||
a <http://www.w3.org/ns/org#Organization> ,
|
||||
<http://data.vlaanderen.be/ns/besluit#Bestuurseenheid> ,
|
||||
<http://purl.org/dc/terms/Agent> ;
|
||||
<http://mu.semte.ch/vocabularies/core/uuid> "333683e2-4a5a-4639-af0e-bcec85fe9d21" ;
|
||||
<http://www.w3.org/ns/org#classification> <http://data.vlaanderen.be/id/concept/BestuurseenheidClassificatieCode/5ab0e9b8a3b2ca7c5e000001> ;
|
||||
<http://www.w3.org/2004/02/skos/core#prefLabel> "Etterbeek" ;
|
||||
<http://www.w3.org/ns/regorg#legalName> "Etterbeek" ;
|
||||
<http://www.w3.org/ns/regorg#orgStatus> <http://lblod.data.gift/concepts/63cc561de9188d64ba5840a42ae8f0d6> .
|
||||
}
|
||||
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
<https://data.vlaanderen.be/id/organisatie/OVO025862>
|
||||
<http://data.vlaanderen.be/ns/besluit#werkingsgebied> <http://data.lblod.info/id/werkingsgebieden/2a8f2022-6a4b-421d-a716-7c7f85b3e318> ;
|
||||
<http://www.w3.org/ns/adms#identifier> <http://data.lblod.info/id/identificatoren/56ecd55e-f118-4203-a053-8a55c2cf3f67> ;
|
||||
<http://www.w3.org/ns/adms#identifier> <http://data.lblod.info/id/identificatoren/afb8b3b1-2dea-48b4-90bb-d2b2d12fdf01> ;
|
||||
<http://www.w3.org/ns/org#hasPrimarySite> <http://data.lblod.info/id/vestigingen/dc3537b6-0349-4f91-8428-41646f845574> ;
|
||||
<http://purl.org/dc/terms/source> <https://data.vlaanderen.be/doc/organisatie> .
|
||||
|
||||
<http://data.lblod.info/id/identificatoren/56ecd55e-f118-4203-a053-8a55c2cf3f67>
|
||||
<https://data.vlaanderen.be/ns/generiek#gestructureerdeIdentificator> <http://data.lblod.info/id/gestructureerdeIdentificator/221ebf76-6ebb-4598-9c84-6c4cf25fbb12>;
|
||||
a <http://www.w3.org/ns/adms#Identifier> ;
|
||||
<http://www.w3.org/2004/02/skos/core#notation> "KBO nummer" ;
|
||||
<http://mu.semte.ch/vocabularies/core/uuid> "56ecd55e-f118-4203-a053-8a55c2cf3f67" .
|
||||
|
||||
<http://data.lblod.info/id/gestructureerdeIdentificator/221ebf76-6ebb-4598-9c84-6c4cf25fbb12>
|
||||
a <https://data.vlaanderen.be/ns/generiek#GestructureerdeIdentificator> ;
|
||||
<https://data.vlaanderen.be/ns/generiek#lokaleIdentificator> "0207365610" ;
|
||||
<http://mu.semte.ch/vocabularies/core/uuid> "221ebf76-6ebb-4598-9c84-6c4cf25fbb12" .
|
||||
|
||||
<http://data.lblod.info/id/identificatoren/afb8b3b1-2dea-48b4-90bb-d2b2d12fdf01>
|
||||
<https://data.vlaanderen.be/ns/generiek#gestructureerdeIdentificator> <http://data.lblod.info/id/gestructureerdeIdentificator/2144fff7-78cf-4151-9179-713d83437300>;
|
||||
a <http://www.w3.org/ns/adms#Identifier> ;
|
||||
<http://www.w3.org/2004/02/skos/core#notation> "OVO-nummer" ;
|
||||
<http://mu.semte.ch/vocabularies/core/uuid> "afb8b3b1-2dea-48b4-90bb-d2b2d12fdf01" .
|
||||
|
||||
<http://data.lblod.info/id/gestructureerdeIdentificator/2144fff7-78cf-4151-9179-713d83437300>
|
||||
a <https://data.vlaanderen.be/ns/generiek#GestructureerdeIdentificator> ;
|
||||
<https://data.vlaanderen.be/ns/generiek#lokaleIdentificator> "OVO025862" ;
|
||||
<http://mu.semte.ch/vocabularies/core/uuid> "2144fff7-78cf-4151-9179-713d83437300" .
|
||||
|
||||
<http://data.lblod.info/id/vestigingen/dc3537b6-0349-4f91-8428-41646f845574>
|
||||
a <http://www.w3.org/ns/org#Site> ;
|
||||
<http://mu.semte.ch/vocabularies/core/uuid> "dc3537b6-0349-4f91-8428-41646f845574" ;
|
||||
<http://data.lblod.info/vocabularies/erediensten/vestigingstype> <http://lblod.data.gift/concepts/f1381723dec42c0b6ba6492e41d6f5dd> ;
|
||||
<http://www.w3.org/ns/org#siteAddress> <http://data.lblod.info/id/contact-punten/f729b015-2bb2-4c0a-a904-2332a1adf279> ;
|
||||
<https://data.vlaanderen.be/ns/organisatie#bestaatUit> <http://data.lblod.info/id/adressen/4c4c7145-066e-460d-aad0-2af638f41dfb> .
|
||||
|
||||
<http://data.lblod.info/id/contact-punten/f729b015-2bb2-4c0a-a904-2332a1adf279>
|
||||
a <http://schema.org/ContactPoint> ;
|
||||
<http://mu.semte.ch/vocabularies/core/uuid> "f729b015-2bb2-4c0a-a904-2332a1adf279" ;
|
||||
<http://schema.org/email> "info@etterbeek.be" ;
|
||||
<http://schema.org/telephone> "tel:+3226272111" ;
|
||||
<http://schema.org/contactType> "Primary" ;
|
||||
<http://xmlns.com/foaf/0.1/page> "https://etterbeek.brussels" .
|
||||
|
||||
<http://data.lblod.info/id/adressen/4c4c7145-066e-460d-aad0-2af638f41dfb>
|
||||
a <http://www.w3.org/ns/locn#Address> ;
|
||||
<http://mu.semte.ch/vocabularies/core/uuid> "4c4c7145-066e-460d-aad0-2af638f41dfb" ;
|
||||
<https://data.vlaanderen.be/ns/adres#gemeentenaam> "Etterbeek" ;
|
||||
<https://data.vlaanderen.be/ns/adres#land> "België" ;
|
||||
<https://data.vlaanderen.be/ns/adres#Adresvoorstelling.huisnummer> "115" ;
|
||||
<http://www.w3.org/ns/locn#fullAddress> "Oudergemlaan 115, 1040 Etterbeek, België" ;
|
||||
<http://www.w3.org/ns/locn#postCode> "1040" ;
|
||||
<http://www.w3.org/ns/locn#thoroughfare> "Oudergemlaan" .
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,78 @@
|
||||
INSERT DATA {
|
||||
GRAPH <http://mu.semte.ch/graphs/public> {
|
||||
<http://data.lblod.info/id/werkingsgebieden/cd00668d-9233-4108-b690-f70e2f2e28a0>
|
||||
a <http://www.w3.org/ns/prov#Location> ;
|
||||
<http://mu.semte.ch/vocabularies/core/uuid> "cd00668d-9233-4108-b690-f70e2f2e28a0" ;
|
||||
<http://www.w3.org/2000/01/rdf-schema#label> "Evere" ;
|
||||
<http://mu.semte.ch/vocabularies/ext/werkingsgebiedNiveau> "Gemeente" ;
|
||||
<http://www.w3.org/2004/02/skos/core#exactMatch> <http://vocab.belgif.be/auth/refnis2025/21006> .
|
||||
}
|
||||
|
||||
GRAPH <http://mu.semte.ch/graphs/shared> {
|
||||
<https://data.vlaanderen.be/id/organisatie/OVO025863>
|
||||
a <http://www.w3.org/ns/org#Organization> ,
|
||||
<http://data.vlaanderen.be/ns/besluit#Bestuurseenheid> ,
|
||||
<http://purl.org/dc/terms/Agent> ;
|
||||
<http://mu.semte.ch/vocabularies/core/uuid> "56c4b098-45e7-4115-b2f7-a56f8fb9a1e0" ;
|
||||
<http://www.w3.org/ns/org#classification> <http://data.vlaanderen.be/id/concept/BestuurseenheidClassificatieCode/5ab0e9b8a3b2ca7c5e000001> ;
|
||||
<http://www.w3.org/2004/02/skos/core#prefLabel> "Evere" ;
|
||||
<http://www.w3.org/ns/regorg#legalName> "Evere" ;
|
||||
<http://www.w3.org/ns/regorg#orgStatus> <http://lblod.data.gift/concepts/63cc561de9188d64ba5840a42ae8f0d6> .
|
||||
}
|
||||
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
<https://data.vlaanderen.be/id/organisatie/OVO025863>
|
||||
<http://data.vlaanderen.be/ns/besluit#werkingsgebied> <http://data.lblod.info/id/werkingsgebieden/cd00668d-9233-4108-b690-f70e2f2e28a0> ;
|
||||
<http://www.w3.org/ns/adms#identifier> <http://data.lblod.info/id/identificatoren/ecb0f120-36b3-492c-b20e-8009fa8e4828> ;
|
||||
<http://www.w3.org/ns/adms#identifier> <http://data.lblod.info/id/identificatoren/80edaf56-2f42-451d-aa7f-473450386b67> ;
|
||||
<http://www.w3.org/ns/org#hasPrimarySite> <http://data.lblod.info/id/vestigingen/9080f879-d78d-47fc-b083-8912fb31474e> ;
|
||||
<http://purl.org/dc/terms/source> <https://data.vlaanderen.be/doc/organisatie> .
|
||||
|
||||
<http://data.lblod.info/id/identificatoren/ecb0f120-36b3-492c-b20e-8009fa8e4828>
|
||||
<https://data.vlaanderen.be/ns/generiek#gestructureerdeIdentificator> <http://data.lblod.info/id/gestructureerdeIdentificator/cc8deba0-3d7c-4ecc-96b0-9aea331d5bda>;
|
||||
a <http://www.w3.org/ns/adms#Identifier> ;
|
||||
<http://www.w3.org/2004/02/skos/core#notation> "KBO nummer" ;
|
||||
<http://mu.semte.ch/vocabularies/core/uuid> "ecb0f120-36b3-492c-b20e-8009fa8e4828" .
|
||||
|
||||
<http://data.lblod.info/id/gestructureerdeIdentificator/cc8deba0-3d7c-4ecc-96b0-9aea331d5bda>
|
||||
a <https://data.vlaanderen.be/ns/generiek#GestructureerdeIdentificator> ;
|
||||
<https://data.vlaanderen.be/ns/generiek#lokaleIdentificator> "0207365709" ;
|
||||
<http://mu.semte.ch/vocabularies/core/uuid> "cc8deba0-3d7c-4ecc-96b0-9aea331d5bda" .
|
||||
|
||||
<http://data.lblod.info/id/identificatoren/80edaf56-2f42-451d-aa7f-473450386b67>
|
||||
<https://data.vlaanderen.be/ns/generiek#gestructureerdeIdentificator> <http://data.lblod.info/id/gestructureerdeIdentificator/248e8391-e2dc-4b4b-a687-8c839376495f>;
|
||||
a <http://www.w3.org/ns/adms#Identifier> ;
|
||||
<http://www.w3.org/2004/02/skos/core#notation> "OVO-nummer" ;
|
||||
<http://mu.semte.ch/vocabularies/core/uuid> "80edaf56-2f42-451d-aa7f-473450386b67" .
|
||||
|
||||
<http://data.lblod.info/id/gestructureerdeIdentificator/248e8391-e2dc-4b4b-a687-8c839376495f>
|
||||
a <https://data.vlaanderen.be/ns/generiek#GestructureerdeIdentificator> ;
|
||||
<https://data.vlaanderen.be/ns/generiek#lokaleIdentificator> "OVO025863" ;
|
||||
<http://mu.semte.ch/vocabularies/core/uuid> "248e8391-e2dc-4b4b-a687-8c839376495f" .
|
||||
|
||||
<http://data.lblod.info/id/vestigingen/9080f879-d78d-47fc-b083-8912fb31474e>
|
||||
a <http://www.w3.org/ns/org#Site> ;
|
||||
<http://mu.semte.ch/vocabularies/core/uuid> "9080f879-d78d-47fc-b083-8912fb31474e" ;
|
||||
<http://data.lblod.info/vocabularies/erediensten/vestigingstype> <http://lblod.data.gift/concepts/f1381723dec42c0b6ba6492e41d6f5dd> ;
|
||||
<http://www.w3.org/ns/org#siteAddress> <http://data.lblod.info/id/contact-punten/e6255d3e-e826-4b82-87cf-52cc1d72b090> ;
|
||||
<https://data.vlaanderen.be/ns/organisatie#bestaatUit> <http://data.lblod.info/id/adressen/6f1c3769-098a-4640-be42-cdfb55a422b6> .
|
||||
|
||||
<http://data.lblod.info/id/contact-punten/e6255d3e-e826-4b82-87cf-52cc1d72b090>
|
||||
a <http://schema.org/ContactPoint> ;
|
||||
<http://mu.semte.ch/vocabularies/core/uuid> "e6255d3e-e826-4b82-87cf-52cc1d72b090" ;
|
||||
<http://schema.org/email> "evere@brutele.be" ;
|
||||
<http://schema.org/telephone> "tel:+3222476262" ;
|
||||
<http://schema.org/contactType> "Primary" ;
|
||||
<http://xmlns.com/foaf/0.1/page> "https://evere.brussels/" .
|
||||
|
||||
<http://data.lblod.info/id/adressen/6f1c3769-098a-4640-be42-cdfb55a422b6>
|
||||
a <http://www.w3.org/ns/locn#Address> ;
|
||||
<http://mu.semte.ch/vocabularies/core/uuid> "6f1c3769-098a-4640-be42-cdfb55a422b6" ;
|
||||
<https://data.vlaanderen.be/ns/adres#gemeentenaam> "Evere" ;
|
||||
<https://data.vlaanderen.be/ns/adres#land> "België" ;
|
||||
<https://data.vlaanderen.be/ns/adres#Adresvoorstelling.huisnummer> "10" ;
|
||||
<http://www.w3.org/ns/locn#fullAddress> "S. Hoedemaekerssquare 10, 1140 Evere, België" ;
|
||||
<http://www.w3.org/ns/locn#postCode> "1140" ;
|
||||
<http://www.w3.org/ns/locn#thoroughfare> "S. Hoedemaekerssquare" .
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,78 @@
|
||||
INSERT DATA {
|
||||
GRAPH <http://mu.semte.ch/graphs/public> {
|
||||
<http://data.lblod.info/id/werkingsgebieden/77b98d71-5c90-484d-ba2f-2ca9bafe1abb>
|
||||
a <http://www.w3.org/ns/prov#Location> ;
|
||||
<http://mu.semte.ch/vocabularies/core/uuid> "77b98d71-5c90-484d-ba2f-2ca9bafe1abb" ;
|
||||
<http://www.w3.org/2000/01/rdf-schema#label> "Ganshoren" ;
|
||||
<http://mu.semte.ch/vocabularies/ext/werkingsgebiedNiveau> "Gemeente" ;
|
||||
<http://www.w3.org/2004/02/skos/core#exactMatch> <http://vocab.belgif.be/auth/refnis2025/21008> .
|
||||
}
|
||||
|
||||
GRAPH <http://mu.semte.ch/graphs/shared> {
|
||||
<https://data.vlaanderen.be/id/organisatie/OVO026992>
|
||||
a <http://www.w3.org/ns/org#Organization> ,
|
||||
<http://data.vlaanderen.be/ns/besluit#Bestuurseenheid> ,
|
||||
<http://purl.org/dc/terms/Agent> ;
|
||||
<http://mu.semte.ch/vocabularies/core/uuid> "05171f8f-b15f-4462-a46e-4b93695593f8" ;
|
||||
<http://www.w3.org/ns/org#classification> <http://data.vlaanderen.be/id/concept/BestuurseenheidClassificatieCode/5ab0e9b8a3b2ca7c5e000001> ;
|
||||
<http://www.w3.org/2004/02/skos/core#prefLabel> "Ganshoren" ;
|
||||
<http://www.w3.org/ns/regorg#legalName> "Ganshoren" ;
|
||||
<http://www.w3.org/ns/regorg#orgStatus> <http://lblod.data.gift/concepts/63cc561de9188d64ba5840a42ae8f0d6> .
|
||||
}
|
||||
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
<https://data.vlaanderen.be/id/organisatie/OVO026992>
|
||||
<http://data.vlaanderen.be/ns/besluit#werkingsgebied> <http://data.lblod.info/id/werkingsgebieden/77b98d71-5c90-484d-ba2f-2ca9bafe1abb> ;
|
||||
<http://www.w3.org/ns/adms#identifier> <http://data.lblod.info/id/identificatoren/9ee7b37b-dcb2-41f7-a623-4b409b21c514> ;
|
||||
<http://www.w3.org/ns/adms#identifier> <http://data.lblod.info/id/identificatoren/f3c1a6c7-23a7-49df-9338-065659186575> ;
|
||||
<http://www.w3.org/ns/org#hasPrimarySite> <http://data.lblod.info/id/vestigingen/ed10ce9c-c582-4b49-9ba6-9e228868f860> ;
|
||||
<http://purl.org/dc/terms/source> <https://data.vlaanderen.be/doc/organisatie> .
|
||||
|
||||
<http://data.lblod.info/id/identificatoren/9ee7b37b-dcb2-41f7-a623-4b409b21c514>
|
||||
<https://data.vlaanderen.be/ns/generiek#gestructureerdeIdentificator> <http://data.lblod.info/id/gestructureerdeIdentificator/63a1ccfa-3545-4883-8f56-2bad82302028>;
|
||||
a <http://www.w3.org/ns/adms#Identifier> ;
|
||||
<http://www.w3.org/2004/02/skos/core#notation> "KBO nummer" ;
|
||||
<http://mu.semte.ch/vocabularies/core/uuid> "9ee7b37b-dcb2-41f7-a623-4b409b21c514" .
|
||||
|
||||
<http://data.lblod.info/id/gestructureerdeIdentificator/63a1ccfa-3545-4883-8f56-2bad82302028>
|
||||
a <https://data.vlaanderen.be/ns/generiek#GestructureerdeIdentificator> ;
|
||||
<https://data.vlaanderen.be/ns/generiek#lokaleIdentificator> "0207401044" ;
|
||||
<http://mu.semte.ch/vocabularies/core/uuid> "63a1ccfa-3545-4883-8f56-2bad82302028" .
|
||||
|
||||
<http://data.lblod.info/id/identificatoren/f3c1a6c7-23a7-49df-9338-065659186575>
|
||||
<https://data.vlaanderen.be/ns/generiek#gestructureerdeIdentificator> <http://data.lblod.info/id/gestructureerdeIdentificator/6fef2797-0b22-4e6e-b036-4590362bf129>;
|
||||
a <http://www.w3.org/ns/adms#Identifier> ;
|
||||
<http://www.w3.org/2004/02/skos/core#notation> "OVO-nummer" ;
|
||||
<http://mu.semte.ch/vocabularies/core/uuid> "f3c1a6c7-23a7-49df-9338-065659186575" .
|
||||
|
||||
<http://data.lblod.info/id/gestructureerdeIdentificator/6fef2797-0b22-4e6e-b036-4590362bf129>
|
||||
a <https://data.vlaanderen.be/ns/generiek#GestructureerdeIdentificator> ;
|
||||
<https://data.vlaanderen.be/ns/generiek#lokaleIdentificator> "OVO026992" ;
|
||||
<http://mu.semte.ch/vocabularies/core/uuid> "6fef2797-0b22-4e6e-b036-4590362bf129" .
|
||||
|
||||
<http://data.lblod.info/id/vestigingen/ed10ce9c-c582-4b49-9ba6-9e228868f860>
|
||||
a <http://www.w3.org/ns/org#Site> ;
|
||||
<http://mu.semte.ch/vocabularies/core/uuid> "ed10ce9c-c582-4b49-9ba6-9e228868f860" ;
|
||||
<http://data.lblod.info/vocabularies/erediensten/vestigingstype> <http://lblod.data.gift/concepts/f1381723dec42c0b6ba6492e41d6f5dd> ;
|
||||
<http://www.w3.org/ns/org#siteAddress> <http://data.lblod.info/id/contact-punten/8732662e-d6f0-4845-9881-4a8909f3d216> ;
|
||||
<https://data.vlaanderen.be/ns/organisatie#bestaatUit> <http://data.lblod.info/id/adressen/a219f021-e4a5-47a9-a774-cefb3b879a1f> .
|
||||
|
||||
<http://data.lblod.info/id/contact-punten/8732662e-d6f0-4845-9881-4a8909f3d216>
|
||||
a <http://schema.org/ContactPoint> ;
|
||||
<http://mu.semte.ch/vocabularies/core/uuid> "8732662e-d6f0-4845-9881-4a8909f3d216" ;
|
||||
<http://schema.org/email> "ganshoren@ganshoren.brussels" ;
|
||||
<http://schema.org/telephone> "tel:+3224651277" ;
|
||||
<http://schema.org/contactType> "Primary" ;
|
||||
<http://xmlns.com/foaf/0.1/page> "https://www.ganshoren.be/" .
|
||||
|
||||
<http://data.lblod.info/id/adressen/a219f021-e4a5-47a9-a774-cefb3b879a1f>
|
||||
a <http://www.w3.org/ns/locn#Address> ;
|
||||
<http://mu.semte.ch/vocabularies/core/uuid> "a219f021-e4a5-47a9-a774-cefb3b879a1f" ;
|
||||
<https://data.vlaanderen.be/ns/adres#gemeentenaam> "Ganshoren" ;
|
||||
<https://data.vlaanderen.be/ns/adres#land> "België" ;
|
||||
<https://data.vlaanderen.be/ns/adres#Adresvoorstelling.huisnummer> "140" ;
|
||||
<http://www.w3.org/ns/locn#fullAddress> "Keizer Karellaan 140, 1083 Ganshoren, België" ;
|
||||
<http://www.w3.org/ns/locn#postCode> "1083" ;
|
||||
<http://www.w3.org/ns/locn#thoroughfare> "Keizer Karellaan" .
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,78 @@
|
||||
INSERT DATA {
|
||||
GRAPH <http://mu.semte.ch/graphs/public> {
|
||||
<http://data.lblod.info/id/werkingsgebieden/bec2b245-2cc5-4140-98f3-d81e24ca6b0a>
|
||||
a <http://www.w3.org/ns/prov#Location> ;
|
||||
<http://mu.semte.ch/vocabularies/core/uuid> "bec2b245-2cc5-4140-98f3-d81e24ca6b0a" ;
|
||||
<http://www.w3.org/2000/01/rdf-schema#label> "Jette" ;
|
||||
<http://mu.semte.ch/vocabularies/ext/werkingsgebiedNiveau> "Gemeente" ;
|
||||
<http://www.w3.org/2004/02/skos/core#exactMatch> <http://vocab.belgif.be/auth/refnis2025/21010> .
|
||||
}
|
||||
|
||||
GRAPH <http://mu.semte.ch/graphs/shared> {
|
||||
<https://data.vlaanderen.be/id/organisatie/OVO025864>
|
||||
a <http://www.w3.org/ns/org#Organization> ,
|
||||
<http://data.vlaanderen.be/ns/besluit#Bestuurseenheid> ,
|
||||
<http://purl.org/dc/terms/Agent> ;
|
||||
<http://mu.semte.ch/vocabularies/core/uuid> "0a162b7b-8576-472f-b0e7-4d244b97e2a6" ;
|
||||
<http://www.w3.org/ns/org#classification> <http://data.vlaanderen.be/id/concept/BestuurseenheidClassificatieCode/5ab0e9b8a3b2ca7c5e000001> ;
|
||||
<http://www.w3.org/2004/02/skos/core#prefLabel> "Jette" ;
|
||||
<http://www.w3.org/ns/regorg#legalName> "Jette" ;
|
||||
<http://www.w3.org/ns/regorg#orgStatus> <http://lblod.data.gift/concepts/63cc561de9188d64ba5840a42ae8f0d6> .
|
||||
}
|
||||
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
<https://data.vlaanderen.be/id/organisatie/OVO025864>
|
||||
<http://data.vlaanderen.be/ns/besluit#werkingsgebied> <http://data.lblod.info/id/werkingsgebieden/bec2b245-2cc5-4140-98f3-d81e24ca6b0a> ;
|
||||
<http://www.w3.org/ns/adms#identifier> <http://data.lblod.info/id/identificatoren/eeefd726-7c1a-4c16-89d2-c49c154a0e63> ;
|
||||
<http://www.w3.org/ns/adms#identifier> <http://data.lblod.info/id/identificatoren/f9b1f14f-0655-4a80-97ce-6c52ada0dcc7> ;
|
||||
<http://www.w3.org/ns/org#hasPrimarySite> <http://data.lblod.info/id/vestigingen/b0d6de26-6759-4174-9ede-e2705504a0ca> ;
|
||||
<http://purl.org/dc/terms/source> <https://data.vlaanderen.be/doc/organisatie> .
|
||||
|
||||
<http://data.lblod.info/id/identificatoren/eeefd726-7c1a-4c16-89d2-c49c154a0e63>
|
||||
<https://data.vlaanderen.be/ns/generiek#gestructureerdeIdentificator> <http://data.lblod.info/id/gestructureerdeIdentificator/82089dca-7666-4a0e-8054-0f2994a872e8>;
|
||||
a <http://www.w3.org/ns/adms#Identifier> ;
|
||||
<http://www.w3.org/2004/02/skos/core#notation> "KBO nummer" ;
|
||||
<http://mu.semte.ch/vocabularies/core/uuid> "eeefd726-7c1a-4c16-89d2-c49c154a0e63" .
|
||||
|
||||
<http://data.lblod.info/id/gestructureerdeIdentificator/82089dca-7666-4a0e-8054-0f2994a872e8>
|
||||
a <https://data.vlaanderen.be/ns/generiek#GestructureerdeIdentificator> ;
|
||||
<https://data.vlaanderen.be/ns/generiek#lokaleIdentificator> "0207366895" ;
|
||||
<http://mu.semte.ch/vocabularies/core/uuid> "82089dca-7666-4a0e-8054-0f2994a872e8" .
|
||||
|
||||
<http://data.lblod.info/id/identificatoren/f9b1f14f-0655-4a80-97ce-6c52ada0dcc7>
|
||||
<https://data.vlaanderen.be/ns/generiek#gestructureerdeIdentificator> <http://data.lblod.info/id/gestructureerdeIdentificator/f7017215-3845-46e7-90d4-cfcec08e14f9>;
|
||||
a <http://www.w3.org/ns/adms#Identifier> ;
|
||||
<http://www.w3.org/2004/02/skos/core#notation> "OVO-nummer" ;
|
||||
<http://mu.semte.ch/vocabularies/core/uuid> "f9b1f14f-0655-4a80-97ce-6c52ada0dcc7" .
|
||||
|
||||
<http://data.lblod.info/id/gestructureerdeIdentificator/f7017215-3845-46e7-90d4-cfcec08e14f9>
|
||||
a <https://data.vlaanderen.be/ns/generiek#GestructureerdeIdentificator> ;
|
||||
<https://data.vlaanderen.be/ns/generiek#lokaleIdentificator> "OVO025864" ;
|
||||
<http://mu.semte.ch/vocabularies/core/uuid> "f7017215-3845-46e7-90d4-cfcec08e14f9" .
|
||||
|
||||
<http://data.lblod.info/id/vestigingen/b0d6de26-6759-4174-9ede-e2705504a0ca>
|
||||
a <http://www.w3.org/ns/org#Site> ;
|
||||
<http://mu.semte.ch/vocabularies/core/uuid> "b0d6de26-6759-4174-9ede-e2705504a0ca" ;
|
||||
<http://data.lblod.info/vocabularies/erediensten/vestigingstype> <http://lblod.data.gift/concepts/f1381723dec42c0b6ba6492e41d6f5dd> ;
|
||||
<http://www.w3.org/ns/org#siteAddress> <http://data.lblod.info/id/contact-punten/36b55789-f70b-4212-a93c-35f04fcf6c3f> ;
|
||||
<https://data.vlaanderen.be/ns/organisatie#bestaatUit> <http://data.lblod.info/id/adressen/b8b6e0ae-9c03-4878-b196-f60a8c7501ed> .
|
||||
|
||||
<http://data.lblod.info/id/contact-punten/36b55789-f70b-4212-a93c-35f04fcf6c3f>
|
||||
a <http://schema.org/ContactPoint> ;
|
||||
<http://mu.semte.ch/vocabularies/core/uuid> "36b55789-f70b-4212-a93c-35f04fcf6c3f" ;
|
||||
<http://schema.org/email> "info@jette.brussels" ;
|
||||
<http://schema.org/telephone> "tel:+3224231211" ;
|
||||
<http://schema.org/contactType> "Primary" ;
|
||||
<http://xmlns.com/foaf/0.1/page> "https://jette.brussels/" .
|
||||
|
||||
<http://data.lblod.info/id/adressen/b8b6e0ae-9c03-4878-b196-f60a8c7501ed>
|
||||
a <http://www.w3.org/ns/locn#Address> ;
|
||||
<http://mu.semte.ch/vocabularies/core/uuid> "b8b6e0ae-9c03-4878-b196-f60a8c7501ed" ;
|
||||
<https://data.vlaanderen.be/ns/adres#gemeentenaam> "Jette" ;
|
||||
<https://data.vlaanderen.be/ns/adres#land> "België" ;
|
||||
<https://data.vlaanderen.be/ns/adres#Adresvoorstelling.huisnummer> "102" ;
|
||||
<http://www.w3.org/ns/locn#fullAddress> "Wemmelse Steenweg 102, 1090 Jette, België" ;
|
||||
<http://www.w3.org/ns/locn#postCode> "1090" ;
|
||||
<http://www.w3.org/ns/locn#thoroughfare> "Wemmelse Steenweg" .
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,78 @@
|
||||
INSERT DATA {
|
||||
GRAPH <http://mu.semte.ch/graphs/public> {
|
||||
<http://data.lblod.info/id/werkingsgebieden/457e89c4-a41b-41ad-b20d-03086c402639>
|
||||
a <http://www.w3.org/ns/prov#Location> ;
|
||||
<http://mu.semte.ch/vocabularies/core/uuid> "457e89c4-a41b-41ad-b20d-03086c402639" ;
|
||||
<http://www.w3.org/2000/01/rdf-schema#label> "Koekelberg" ;
|
||||
<http://mu.semte.ch/vocabularies/ext/werkingsgebiedNiveau> "Gemeente" ;
|
||||
<http://www.w3.org/2004/02/skos/core#exactMatch> <http://vocab.belgif.be/auth/refnis2025/21011> .
|
||||
}
|
||||
|
||||
GRAPH <http://mu.semte.ch/graphs/shared> {
|
||||
<https://data.vlaanderen.be/id/organisatie/OVO025865>
|
||||
a <http://www.w3.org/ns/org#Organization> ,
|
||||
<http://data.vlaanderen.be/ns/besluit#Bestuurseenheid> ,
|
||||
<http://purl.org/dc/terms/Agent> ;
|
||||
<http://mu.semte.ch/vocabularies/core/uuid> "d38eb8bd-3ff1-4cec-b94d-29675eb3f984" ;
|
||||
<http://www.w3.org/ns/org#classification> <http://data.vlaanderen.be/id/concept/BestuurseenheidClassificatieCode/5ab0e9b8a3b2ca7c5e000001> ;
|
||||
<http://www.w3.org/2004/02/skos/core#prefLabel> "Koekelberg" ;
|
||||
<http://www.w3.org/ns/regorg#legalName> "Koekelberg" ;
|
||||
<http://www.w3.org/ns/regorg#orgStatus> <http://lblod.data.gift/concepts/63cc561de9188d64ba5840a42ae8f0d6> .
|
||||
}
|
||||
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
<https://data.vlaanderen.be/id/organisatie/OVO025865>
|
||||
<http://data.vlaanderen.be/ns/besluit#werkingsgebied> <http://data.lblod.info/id/werkingsgebieden/457e89c4-a41b-41ad-b20d-03086c402639> ;
|
||||
<http://www.w3.org/ns/adms#identifier> <http://data.lblod.info/id/identificatoren/4abab8a9-7c79-4330-8fc7-e4a325604b2d> ;
|
||||
<http://www.w3.org/ns/adms#identifier> <http://data.lblod.info/id/identificatoren/f9ec107a-73cd-4a9e-882b-bf714b6b9485> ;
|
||||
<http://www.w3.org/ns/org#hasPrimarySite> <http://data.lblod.info/id/vestigingen/fe1ed9ff-3e07-4f67-bbc3-9fae906f6cc3> ;
|
||||
<http://purl.org/dc/terms/source> <https://data.vlaanderen.be/doc/organisatie> .
|
||||
|
||||
<http://data.lblod.info/id/identificatoren/4abab8a9-7c79-4330-8fc7-e4a325604b2d>
|
||||
<https://data.vlaanderen.be/ns/generiek#gestructureerdeIdentificator> <http://data.lblod.info/id/gestructureerdeIdentificator/bacf971e-7143-4e74-97c6-89ce746aeb09>;
|
||||
a <http://www.w3.org/ns/adms#Identifier> ;
|
||||
<http://www.w3.org/2004/02/skos/core#notation> "KBO nummer" ;
|
||||
<http://mu.semte.ch/vocabularies/core/uuid> "4abab8a9-7c79-4330-8fc7-e4a325604b2d" .
|
||||
|
||||
<http://data.lblod.info/id/gestructureerdeIdentificator/bacf971e-7143-4e74-97c6-89ce746aeb09>
|
||||
a <https://data.vlaanderen.be/ns/generiek#GestructureerdeIdentificator> ;
|
||||
<https://data.vlaanderen.be/ns/generiek#lokaleIdentificator> "0207372538" ;
|
||||
<http://mu.semte.ch/vocabularies/core/uuid> "bacf971e-7143-4e74-97c6-89ce746aeb09" .
|
||||
|
||||
<http://data.lblod.info/id/identificatoren/f9ec107a-73cd-4a9e-882b-bf714b6b9485>
|
||||
<https://data.vlaanderen.be/ns/generiek#gestructureerdeIdentificator> <http://data.lblod.info/id/gestructureerdeIdentificator/8a86fb4a-c30c-44b2-9713-93506f1f1d6e>;
|
||||
a <http://www.w3.org/ns/adms#Identifier> ;
|
||||
<http://www.w3.org/2004/02/skos/core#notation> "OVO-nummer" ;
|
||||
<http://mu.semte.ch/vocabularies/core/uuid> "f9ec107a-73cd-4a9e-882b-bf714b6b9485" .
|
||||
|
||||
<http://data.lblod.info/id/gestructureerdeIdentificator/8a86fb4a-c30c-44b2-9713-93506f1f1d6e>
|
||||
a <https://data.vlaanderen.be/ns/generiek#GestructureerdeIdentificator> ;
|
||||
<https://data.vlaanderen.be/ns/generiek#lokaleIdentificator> "OVO025865" ;
|
||||
<http://mu.semte.ch/vocabularies/core/uuid> "8a86fb4a-c30c-44b2-9713-93506f1f1d6e" .
|
||||
|
||||
<http://data.lblod.info/id/vestigingen/fe1ed9ff-3e07-4f67-bbc3-9fae906f6cc3>
|
||||
a <http://www.w3.org/ns/org#Site> ;
|
||||
<http://mu.semte.ch/vocabularies/core/uuid> "fe1ed9ff-3e07-4f67-bbc3-9fae906f6cc3" ;
|
||||
<http://data.lblod.info/vocabularies/erediensten/vestigingstype> <http://lblod.data.gift/concepts/f1381723dec42c0b6ba6492e41d6f5dd> ;
|
||||
<http://www.w3.org/ns/org#siteAddress> <http://data.lblod.info/id/contact-punten/11f67d9e-0d64-4f09-825c-f1afebdfe11b> ;
|
||||
<https://data.vlaanderen.be/ns/organisatie#bestaatUit> <http://data.lblod.info/id/adressen/aed51fac-fbf4-4cb4-8bac-9fbcf65cee49> .
|
||||
|
||||
<http://data.lblod.info/id/contact-punten/11f67d9e-0d64-4f09-825c-f1afebdfe11b>
|
||||
a <http://schema.org/ContactPoint> ;
|
||||
<http://mu.semte.ch/vocabularies/core/uuid> "11f67d9e-0d64-4f09-825c-f1afebdfe11b" ;
|
||||
<http://schema.org/email> "info.1081@koekelberg.brussels" ;
|
||||
<http://schema.org/telephone> "tel:+3224121411" ;
|
||||
<http://schema.org/contactType> "Primary" ;
|
||||
<http://xmlns.com/foaf/0.1/page> "https://www.koekelberg.be/" .
|
||||
|
||||
<http://data.lblod.info/id/adressen/aed51fac-fbf4-4cb4-8bac-9fbcf65cee49>
|
||||
a <http://www.w3.org/ns/locn#Address> ;
|
||||
<http://mu.semte.ch/vocabularies/core/uuid> "aed51fac-fbf4-4cb4-8bac-9fbcf65cee49" ;
|
||||
<https://data.vlaanderen.be/ns/adres#gemeentenaam> "Koekelberg" ;
|
||||
<https://data.vlaanderen.be/ns/adres#land> "België" ;
|
||||
<https://data.vlaanderen.be/ns/adres#Adresvoorstelling.huisnummer> "6" ;
|
||||
<http://www.w3.org/ns/locn#fullAddress> "Henri Vanhuffelplein 6, 1081 Koekelberg, België" ;
|
||||
<http://www.w3.org/ns/locn#postCode> "1081" ;
|
||||
<http://www.w3.org/ns/locn#thoroughfare> "Henri Vanhuffelplein" .
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,78 @@
|
||||
INSERT DATA {
|
||||
GRAPH <http://mu.semte.ch/graphs/public> {
|
||||
<http://data.lblod.info/id/werkingsgebieden/a3830237-98c6-4b8b-83f5-6de34e6243ac>
|
||||
a <http://www.w3.org/ns/prov#Location> ;
|
||||
<http://mu.semte.ch/vocabularies/core/uuid> "a3830237-98c6-4b8b-83f5-6de34e6243ac" ;
|
||||
<http://www.w3.org/2000/01/rdf-schema#label> "Oudergem" ;
|
||||
<http://mu.semte.ch/vocabularies/ext/werkingsgebiedNiveau> "Gemeente" ;
|
||||
<http://www.w3.org/2004/02/skos/core#exactMatch> <http://vocab.belgif.be/auth/refnis2025/21002> .
|
||||
}
|
||||
|
||||
GRAPH <http://mu.semte.ch/graphs/shared> {
|
||||
<https://data.vlaanderen.be/id/organisatie/OVO025826>
|
||||
a <http://www.w3.org/ns/org#Organization> ,
|
||||
<http://data.vlaanderen.be/ns/besluit#Bestuurseenheid> ,
|
||||
<http://purl.org/dc/terms/Agent> ;
|
||||
<http://mu.semte.ch/vocabularies/core/uuid> "561d167f-4633-46e3-bf55-b33ff926096c" ;
|
||||
<http://www.w3.org/ns/org#classification> <http://data.vlaanderen.be/id/concept/BestuurseenheidClassificatieCode/5ab0e9b8a3b2ca7c5e000001> ;
|
||||
<http://www.w3.org/2004/02/skos/core#prefLabel> "Oudergem" ;
|
||||
<http://www.w3.org/ns/regorg#legalName> "Oudergem" ;
|
||||
<http://www.w3.org/ns/regorg#orgStatus> <http://lblod.data.gift/concepts/63cc561de9188d64ba5840a42ae8f0d6> .
|
||||
}
|
||||
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
<https://data.vlaanderen.be/id/organisatie/OVO025826>
|
||||
<http://data.vlaanderen.be/ns/besluit#werkingsgebied> <http://data.lblod.info/id/werkingsgebieden/a3830237-98c6-4b8b-83f5-6de34e6243ac> ;
|
||||
<http://www.w3.org/ns/adms#identifier> <http://data.lblod.info/id/identificatoren/178612d1-9355-42aa-9168-4f110025952e> ;
|
||||
<http://www.w3.org/ns/adms#identifier> <http://data.lblod.info/id/identificatoren/064b5191-4abd-4d39-9598-aea388e3da93> ;
|
||||
<http://www.w3.org/ns/org#hasPrimarySite> <http://data.lblod.info/id/vestigingen/fc4773ca-58dd-4c36-a5c6-71d222f3361a> ;
|
||||
<http://purl.org/dc/terms/source> <https://data.vlaanderen.be/doc/organisatie> .
|
||||
|
||||
<http://data.lblod.info/id/identificatoren/178612d1-9355-42aa-9168-4f110025952e>
|
||||
<https://data.vlaanderen.be/ns/generiek#gestructureerdeIdentificator> <http://data.lblod.info/id/gestructureerdeIdentificator/abece0d8-d7bf-4f61-92f6-9bde471bc7bd>;
|
||||
a <http://www.w3.org/ns/adms#Identifier> ;
|
||||
<http://www.w3.org/2004/02/skos/core#notation> "KBO nummer" ;
|
||||
<http://mu.semte.ch/vocabularies/core/uuid> "178612d1-9355-42aa-9168-4f110025952e" .
|
||||
|
||||
<http://data.lblod.info/id/gestructureerdeIdentificator/abece0d8-d7bf-4f61-92f6-9bde471bc7bd>
|
||||
a <https://data.vlaanderen.be/ns/generiek#GestructureerdeIdentificator> ;
|
||||
<https://data.vlaanderen.be/ns/generiek#lokaleIdentificator> "0207540408" ;
|
||||
<http://mu.semte.ch/vocabularies/core/uuid> "abece0d8-d7bf-4f61-92f6-9bde471bc7bd" .
|
||||
|
||||
<http://data.lblod.info/id/identificatoren/064b5191-4abd-4d39-9598-aea388e3da93>
|
||||
<https://data.vlaanderen.be/ns/generiek#gestructureerdeIdentificator> <http://data.lblod.info/id/gestructureerdeIdentificator/25e502d8-62a5-4a97-bb7f-52d91b335067>;
|
||||
a <http://www.w3.org/ns/adms#Identifier> ;
|
||||
<http://www.w3.org/2004/02/skos/core#notation> "OVO-nummer" ;
|
||||
<http://mu.semte.ch/vocabularies/core/uuid> "064b5191-4abd-4d39-9598-aea388e3da93" .
|
||||
|
||||
<http://data.lblod.info/id/gestructureerdeIdentificator/25e502d8-62a5-4a97-bb7f-52d91b335067>
|
||||
a <https://data.vlaanderen.be/ns/generiek#GestructureerdeIdentificator> ;
|
||||
<https://data.vlaanderen.be/ns/generiek#lokaleIdentificator> "OVO025826" ;
|
||||
<http://mu.semte.ch/vocabularies/core/uuid> "25e502d8-62a5-4a97-bb7f-52d91b335067" .
|
||||
|
||||
<http://data.lblod.info/id/vestigingen/fc4773ca-58dd-4c36-a5c6-71d222f3361a>
|
||||
a <http://www.w3.org/ns/org#Site> ;
|
||||
<http://mu.semte.ch/vocabularies/core/uuid> "fc4773ca-58dd-4c36-a5c6-71d222f3361a" ;
|
||||
<http://data.lblod.info/vocabularies/erediensten/vestigingstype> <http://lblod.data.gift/concepts/f1381723dec42c0b6ba6492e41d6f5dd> ;
|
||||
<http://www.w3.org/ns/org#siteAddress> <http://data.lblod.info/id/contact-punten/65632038-54fe-4aab-9457-c0f0d0a5c568> ;
|
||||
<https://data.vlaanderen.be/ns/organisatie#bestaatUit> <http://data.lblod.info/id/adressen/95c6a03f-2cd4-4492-8c0b-755a65650f3c> .
|
||||
|
||||
<http://data.lblod.info/id/contact-punten/65632038-54fe-4aab-9457-c0f0d0a5c568>
|
||||
a <http://schema.org/ContactPoint> ;
|
||||
<http://mu.semte.ch/vocabularies/core/uuid> "65632038-54fe-4aab-9457-c0f0d0a5c568" ;
|
||||
<http://schema.org/email> "relpub@auderghem.be" ;
|
||||
<http://schema.org/telephone> "tel:+3226764811" ;
|
||||
<http://schema.org/contactType> "Primary" ;
|
||||
<http://xmlns.com/foaf/0.1/page> "https://www.oudergem.be/" .
|
||||
|
||||
<http://data.lblod.info/id/adressen/95c6a03f-2cd4-4492-8c0b-755a65650f3c>
|
||||
a <http://www.w3.org/ns/locn#Address> ;
|
||||
<http://mu.semte.ch/vocabularies/core/uuid> "95c6a03f-2cd4-4492-8c0b-755a65650f3c" ;
|
||||
<https://data.vlaanderen.be/ns/adres#gemeentenaam> "Oudergem" ;
|
||||
<https://data.vlaanderen.be/ns/adres#land> "België" ;
|
||||
<https://data.vlaanderen.be/ns/adres#Adresvoorstelling.huisnummer> "12" ;
|
||||
<http://www.w3.org/ns/locn#fullAddress> "Emile Idiersstraat 12, 1160 Oudergem, België" ;
|
||||
<http://www.w3.org/ns/locn#postCode> "1160" ;
|
||||
<http://www.w3.org/ns/locn#thoroughfare> "Emile Idiersstraat" .
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,78 @@
|
||||
INSERT DATA {
|
||||
GRAPH <http://mu.semte.ch/graphs/public> {
|
||||
<http://data.lblod.info/id/werkingsgebieden/aaec0a10-8bb9-4644-8be5-89da0920dbed>
|
||||
a <http://www.w3.org/ns/prov#Location> ;
|
||||
<http://mu.semte.ch/vocabularies/core/uuid> "aaec0a10-8bb9-4644-8be5-89da0920dbed" ;
|
||||
<http://www.w3.org/2000/01/rdf-schema#label> "Schaarbeek" ;
|
||||
<http://mu.semte.ch/vocabularies/ext/werkingsgebiedNiveau> "Gemeente" ;
|
||||
<http://www.w3.org/2004/02/skos/core#exactMatch> <http://vocab.belgif.be/auth/refnis2025/21015> .
|
||||
}
|
||||
|
||||
GRAPH <http://mu.semte.ch/graphs/shared> {
|
||||
<https://data.vlaanderen.be/id/organisatie/OVO025820>
|
||||
a <http://www.w3.org/ns/org#Organization> ,
|
||||
<http://data.vlaanderen.be/ns/besluit#Bestuurseenheid> ,
|
||||
<http://purl.org/dc/terms/Agent> ;
|
||||
<http://mu.semte.ch/vocabularies/core/uuid> "1a5177fd-6068-4640-ab8c-6454400033d8" ;
|
||||
<http://www.w3.org/ns/org#classification> <http://data.vlaanderen.be/id/concept/BestuurseenheidClassificatieCode/5ab0e9b8a3b2ca7c5e000001> ;
|
||||
<http://www.w3.org/2004/02/skos/core#prefLabel> "Schaarbeek" ;
|
||||
<http://www.w3.org/ns/regorg#legalName> "Schaarbeek" ;
|
||||
<http://www.w3.org/ns/regorg#orgStatus> <http://lblod.data.gift/concepts/63cc561de9188d64ba5840a42ae8f0d6> .
|
||||
}
|
||||
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
<https://data.vlaanderen.be/id/organisatie/OVO025820>
|
||||
<http://data.vlaanderen.be/ns/besluit#werkingsgebied> <http://data.lblod.info/id/werkingsgebieden/aaec0a10-8bb9-4644-8be5-89da0920dbed> ;
|
||||
<http://www.w3.org/ns/adms#identifier> <http://data.lblod.info/id/identificatoren/d9ea7d1d-87f3-4178-856c-265a95acbc91> ;
|
||||
<http://www.w3.org/ns/adms#identifier> <http://data.lblod.info/id/identificatoren/14e75d82-eff1-49fc-a753-cb96420f8c8a> ;
|
||||
<http://www.w3.org/ns/org#hasPrimarySite> <http://data.lblod.info/id/vestigingen/be200efc-8399-4cd6-a913-d64a239bce78> ;
|
||||
<http://purl.org/dc/terms/source> <https://data.vlaanderen.be/doc/organisatie> .
|
||||
|
||||
<http://data.lblod.info/id/identificatoren/d9ea7d1d-87f3-4178-856c-265a95acbc91>
|
||||
<https://data.vlaanderen.be/ns/generiek#gestructureerdeIdentificator> <http://data.lblod.info/id/gestructureerdeIdentificator/e9479cf1-e50e-4761-8128-b8992216263f>;
|
||||
a <http://www.w3.org/ns/adms#Identifier> ;
|
||||
<http://www.w3.org/2004/02/skos/core#notation> "KBO nummer" ;
|
||||
<http://mu.semte.ch/vocabularies/core/uuid> "d9ea7d1d-87f3-4178-856c-265a95acbc91" .
|
||||
|
||||
<http://data.lblod.info/id/gestructureerdeIdentificator/e9479cf1-e50e-4761-8128-b8992216263f>
|
||||
a <https://data.vlaanderen.be/ns/generiek#GestructureerdeIdentificator> ;
|
||||
<https://data.vlaanderen.be/ns/generiek#lokaleIdentificator> "0207367687" ;
|
||||
<http://mu.semte.ch/vocabularies/core/uuid> "e9479cf1-e50e-4761-8128-b8992216263f" .
|
||||
|
||||
<http://data.lblod.info/id/identificatoren/14e75d82-eff1-49fc-a753-cb96420f8c8a>
|
||||
<https://data.vlaanderen.be/ns/generiek#gestructureerdeIdentificator> <http://data.lblod.info/id/gestructureerdeIdentificator/6c6f25f4-0ecc-4280-93b5-b6afb2cee605>;
|
||||
a <http://www.w3.org/ns/adms#Identifier> ;
|
||||
<http://www.w3.org/2004/02/skos/core#notation> "OVO-nummer" ;
|
||||
<http://mu.semte.ch/vocabularies/core/uuid> "14e75d82-eff1-49fc-a753-cb96420f8c8a" .
|
||||
|
||||
<http://data.lblod.info/id/gestructureerdeIdentificator/6c6f25f4-0ecc-4280-93b5-b6afb2cee605>
|
||||
a <https://data.vlaanderen.be/ns/generiek#GestructureerdeIdentificator> ;
|
||||
<https://data.vlaanderen.be/ns/generiek#lokaleIdentificator> "OVO025820" ;
|
||||
<http://mu.semte.ch/vocabularies/core/uuid> "6c6f25f4-0ecc-4280-93b5-b6afb2cee605" .
|
||||
|
||||
<http://data.lblod.info/id/vestigingen/be200efc-8399-4cd6-a913-d64a239bce78>
|
||||
a <http://www.w3.org/ns/org#Site> ;
|
||||
<http://mu.semte.ch/vocabularies/core/uuid> "be200efc-8399-4cd6-a913-d64a239bce78" ;
|
||||
<http://data.lblod.info/vocabularies/erediensten/vestigingstype> <http://lblod.data.gift/concepts/f1381723dec42c0b6ba6492e41d6f5dd> ;
|
||||
<http://www.w3.org/ns/org#siteAddress> <http://data.lblod.info/id/contact-punten/968afe2c-70b9-4d7a-8ca1-5f6c36575ddd> ;
|
||||
<https://data.vlaanderen.be/ns/organisatie#bestaatUit> <http://data.lblod.info/id/adressen/9dffbe51-9a41-4f98-80e5-33b76b76b586> .
|
||||
|
||||
<http://data.lblod.info/id/contact-punten/968afe2c-70b9-4d7a-8ca1-5f6c36575ddd>
|
||||
a <http://schema.org/ContactPoint> ;
|
||||
<http://mu.semte.ch/vocabularies/core/uuid> "968afe2c-70b9-4d7a-8ca1-5f6c36575ddd" ;
|
||||
<http://schema.org/email> "info@1030.be" ;
|
||||
<http://schema.org/telephone> "tel:+3222447511" ;
|
||||
<http://schema.org/contactType> "Primary" ;
|
||||
<http://xmlns.com/foaf/0.1/page> "https://www.1030.be/" .
|
||||
|
||||
<http://data.lblod.info/id/adressen/9dffbe51-9a41-4f98-80e5-33b76b76b586>
|
||||
a <http://www.w3.org/ns/locn#Address> ;
|
||||
<http://mu.semte.ch/vocabularies/core/uuid> "9dffbe51-9a41-4f98-80e5-33b76b76b586" ;
|
||||
<https://data.vlaanderen.be/ns/adres#gemeentenaam> "Schaarbeek" ;
|
||||
<https://data.vlaanderen.be/ns/adres#land> "België" ;
|
||||
<https://data.vlaanderen.be/ns/adres#Adresvoorstelling.huisnummer> "100" ;
|
||||
<http://www.w3.org/ns/locn#fullAddress> "Colignonplein 100, 1030 Schaarbeek, België" ;
|
||||
<http://www.w3.org/ns/locn#postCode> "1030" ;
|
||||
<http://www.w3.org/ns/locn#thoroughfare> "Colignonplein" .
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,78 @@
|
||||
INSERT DATA {
|
||||
GRAPH <http://mu.semte.ch/graphs/public> {
|
||||
<http://data.lblod.info/id/werkingsgebieden/e5b0ab35-aa0d-4f73-ad2d-446bd67f299d>
|
||||
a <http://www.w3.org/ns/prov#Location> ;
|
||||
<http://mu.semte.ch/vocabularies/core/uuid> "e5b0ab35-aa0d-4f73-ad2d-446bd67f299d" ;
|
||||
<http://www.w3.org/2000/01/rdf-schema#label> "Sint-Agatha-Berchem" ;
|
||||
<http://mu.semte.ch/vocabularies/ext/werkingsgebiedNiveau> "Gemeente" ;
|
||||
<http://www.w3.org/2004/02/skos/core#exactMatch> <http://vocab.belgif.be/auth/refnis2025/21003> .
|
||||
}
|
||||
|
||||
GRAPH <http://mu.semte.ch/graphs/shared> {
|
||||
<https://data.vlaanderen.be/id/organisatie/OVO025827>
|
||||
a <http://www.w3.org/ns/org#Organization> ,
|
||||
<http://data.vlaanderen.be/ns/besluit#Bestuurseenheid> ,
|
||||
<http://purl.org/dc/terms/Agent> ;
|
||||
<http://mu.semte.ch/vocabularies/core/uuid> "6c7276cb-5aaf-41fd-917d-22df996ac186" ;
|
||||
<http://www.w3.org/ns/org#classification> <http://data.vlaanderen.be/id/concept/BestuurseenheidClassificatieCode/5ab0e9b8a3b2ca7c5e000001> ;
|
||||
<http://www.w3.org/2004/02/skos/core#prefLabel> "Sint-Agatha-Berchem" ;
|
||||
<http://www.w3.org/ns/regorg#legalName> "Sint-Agatha-Berchem" ;
|
||||
<http://www.w3.org/ns/regorg#orgStatus> <http://lblod.data.gift/concepts/63cc561de9188d64ba5840a42ae8f0d6> .
|
||||
}
|
||||
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
<https://data.vlaanderen.be/id/organisatie/OVO025827>
|
||||
<http://data.vlaanderen.be/ns/besluit#werkingsgebied> <http://data.lblod.info/id/werkingsgebieden/e5b0ab35-aa0d-4f73-ad2d-446bd67f299d> ;
|
||||
<http://www.w3.org/ns/adms#identifier> <http://data.lblod.info/id/identificatoren/e73cddaa-21fc-4464-b759-6591e15c213d> ;
|
||||
<http://www.w3.org/ns/adms#identifier> <http://data.lblod.info/id/identificatoren/0b0301c4-eb97-4ba4-b8b6-c9e4c089e06c> ;
|
||||
<http://www.w3.org/ns/org#hasPrimarySite> <http://data.lblod.info/id/vestigingen/2d163096-b31e-4006-b3c0-e46c87325aa2> ;
|
||||
<http://purl.org/dc/terms/source> <https://data.vlaanderen.be/doc/organisatie> .
|
||||
|
||||
<http://data.lblod.info/id/identificatoren/e73cddaa-21fc-4464-b759-6591e15c213d>
|
||||
<https://data.vlaanderen.be/ns/generiek#gestructureerdeIdentificator> <http://data.lblod.info/id/gestructureerdeIdentificator/4576728a-b5d3-4fcd-9290-6cee5473de53>;
|
||||
a <http://www.w3.org/ns/adms#Identifier> ;
|
||||
<http://www.w3.org/2004/02/skos/core#notation> "KBO nummer" ;
|
||||
<http://mu.semte.ch/vocabularies/core/uuid> "e73cddaa-21fc-4464-b759-6591e15c213d" .
|
||||
|
||||
<http://data.lblod.info/id/gestructureerdeIdentificator/4576728a-b5d3-4fcd-9290-6cee5473de53>
|
||||
a <https://data.vlaanderen.be/ns/generiek#GestructureerdeIdentificator> ;
|
||||
<https://data.vlaanderen.be/ns/generiek#lokaleIdentificator> "0207541594" ;
|
||||
<http://mu.semte.ch/vocabularies/core/uuid> "4576728a-b5d3-4fcd-9290-6cee5473de53" .
|
||||
|
||||
<http://data.lblod.info/id/identificatoren/0b0301c4-eb97-4ba4-b8b6-c9e4c089e06c>
|
||||
<https://data.vlaanderen.be/ns/generiek#gestructureerdeIdentificator> <http://data.lblod.info/id/gestructureerdeIdentificator/fe86c32e-8910-4530-8042-cb4b9dddf859>;
|
||||
a <http://www.w3.org/ns/adms#Identifier> ;
|
||||
<http://www.w3.org/2004/02/skos/core#notation> "OVO-nummer" ;
|
||||
<http://mu.semte.ch/vocabularies/core/uuid> "0b0301c4-eb97-4ba4-b8b6-c9e4c089e06c" .
|
||||
|
||||
<http://data.lblod.info/id/gestructureerdeIdentificator/fe86c32e-8910-4530-8042-cb4b9dddf859>
|
||||
a <https://data.vlaanderen.be/ns/generiek#GestructureerdeIdentificator> ;
|
||||
<https://data.vlaanderen.be/ns/generiek#lokaleIdentificator> "OVO025827" ;
|
||||
<http://mu.semte.ch/vocabularies/core/uuid> "fe86c32e-8910-4530-8042-cb4b9dddf859" .
|
||||
|
||||
<http://data.lblod.info/id/vestigingen/2d163096-b31e-4006-b3c0-e46c87325aa2>
|
||||
a <http://www.w3.org/ns/org#Site> ;
|
||||
<http://mu.semte.ch/vocabularies/core/uuid> "2d163096-b31e-4006-b3c0-e46c87325aa2" ;
|
||||
<http://data.lblod.info/vocabularies/erediensten/vestigingstype> <http://lblod.data.gift/concepts/f1381723dec42c0b6ba6492e41d6f5dd> ;
|
||||
<http://www.w3.org/ns/org#siteAddress> <http://data.lblod.info/id/contact-punten/536dcfb0-d384-41d5-ac82-770cda4ffaeb> ;
|
||||
<https://data.vlaanderen.be/ns/organisatie#bestaatUit> <http://data.lblod.info/id/adressen/02b6b31a-893e-45c4-94f3-964d58039bff> .
|
||||
|
||||
<http://data.lblod.info/id/contact-punten/536dcfb0-d384-41d5-ac82-770cda4ffaeb>
|
||||
a <http://schema.org/ContactPoint> ;
|
||||
<http://mu.semte.ch/vocabularies/core/uuid> "536dcfb0-d384-41d5-ac82-770cda4ffaeb" ;
|
||||
<http://schema.org/email> "info@berchem.brussels" ;
|
||||
<http://schema.org/telephone> "tel:+3224640411" ;
|
||||
<http://schema.org/contactType> "Primary" ;
|
||||
<http://xmlns.com/foaf/0.1/page> "https://berchem.brussels/" .
|
||||
|
||||
<http://data.lblod.info/id/adressen/02b6b31a-893e-45c4-94f3-964d58039bff>
|
||||
a <http://www.w3.org/ns/locn#Address> ;
|
||||
<http://mu.semte.ch/vocabularies/core/uuid> "02b6b31a-893e-45c4-94f3-964d58039bff" ;
|
||||
<https://data.vlaanderen.be/ns/adres#gemeentenaam> "Sint-Agatha-Berchem" ;
|
||||
<https://data.vlaanderen.be/ns/adres#land> "België" ;
|
||||
<https://data.vlaanderen.be/ns/adres#Adresvoorstelling.huisnummer> "33" ;
|
||||
<http://www.w3.org/ns/locn#fullAddress> "Koning Albertlaan 33, 1082 Sint-Agatha-Berchem, België" ;
|
||||
<http://www.w3.org/ns/locn#postCode> "1082" ;
|
||||
<http://www.w3.org/ns/locn#thoroughfare> "Koning Albertlaan" .
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,78 @@
|
||||
INSERT DATA {
|
||||
GRAPH <http://mu.semte.ch/graphs/public> {
|
||||
<http://data.lblod.info/id/werkingsgebieden/7d3175ad-d4fc-4b56-a780-dab8e159c21d>
|
||||
a <http://www.w3.org/ns/prov#Location> ;
|
||||
<http://mu.semte.ch/vocabularies/core/uuid> "7d3175ad-d4fc-4b56-a780-dab8e159c21d" ;
|
||||
<http://www.w3.org/2000/01/rdf-schema#label> "Sint-Gillis" ;
|
||||
<http://mu.semte.ch/vocabularies/ext/werkingsgebiedNiveau> "Gemeente" ;
|
||||
<http://www.w3.org/2004/02/skos/core#exactMatch> <http://vocab.belgif.be/auth/refnis2025/21013> .
|
||||
}
|
||||
|
||||
GRAPH <http://mu.semte.ch/graphs/shared> {
|
||||
<https://data.vlaanderen.be/id/organisatie/OVO025819>
|
||||
a <http://www.w3.org/ns/org#Organization> ,
|
||||
<http://data.vlaanderen.be/ns/besluit#Bestuurseenheid> ,
|
||||
<http://purl.org/dc/terms/Agent> ;
|
||||
<http://mu.semte.ch/vocabularies/core/uuid> "b93cd217-0c25-48f7-9751-b8723c6c1ac9" ;
|
||||
<http://www.w3.org/ns/org#classification> <http://data.vlaanderen.be/id/concept/BestuurseenheidClassificatieCode/5ab0e9b8a3b2ca7c5e000001> ;
|
||||
<http://www.w3.org/2004/02/skos/core#prefLabel> "Sint-Gillis" ;
|
||||
<http://www.w3.org/ns/regorg#legalName> "Sint-Gillis" ;
|
||||
<http://www.w3.org/ns/regorg#orgStatus> <http://lblod.data.gift/concepts/63cc561de9188d64ba5840a42ae8f0d6> .
|
||||
}
|
||||
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
<https://data.vlaanderen.be/id/organisatie/OVO025819>
|
||||
<http://data.vlaanderen.be/ns/besluit#werkingsgebied> <http://data.lblod.info/id/werkingsgebieden/7d3175ad-d4fc-4b56-a780-dab8e159c21d> ;
|
||||
<http://www.w3.org/ns/adms#identifier> <http://data.lblod.info/id/identificatoren/3b113d58-a06b-428c-9ef6-36e7d354d299> ;
|
||||
<http://www.w3.org/ns/adms#identifier> <http://data.lblod.info/id/identificatoren/10f45315-05d9-409b-b7fd-b8f323ced0d2> ;
|
||||
<http://www.w3.org/ns/org#hasPrimarySite> <http://data.lblod.info/id/vestigingen/8749766d-e283-4145-8460-62360e278175> ;
|
||||
<http://purl.org/dc/terms/source> <https://data.vlaanderen.be/doc/organisatie> .
|
||||
|
||||
<http://data.lblod.info/id/identificatoren/3b113d58-a06b-428c-9ef6-36e7d354d299>
|
||||
<https://data.vlaanderen.be/ns/generiek#gestructureerdeIdentificator> <http://data.lblod.info/id/gestructureerdeIdentificator/12028344-1808-4ac1-81e0-443beaab6684>;
|
||||
a <http://www.w3.org/ns/adms#Identifier> ;
|
||||
<http://www.w3.org/2004/02/skos/core#notation> "KBO nummer" ;
|
||||
<http://mu.semte.ch/vocabularies/core/uuid> "3b113d58-a06b-428c-9ef6-36e7d354d299" .
|
||||
|
||||
<http://data.lblod.info/id/gestructureerdeIdentificator/12028344-1808-4ac1-81e0-443beaab6684>
|
||||
a <https://data.vlaanderen.be/ns/generiek#GestructureerdeIdentificator> ;
|
||||
<https://data.vlaanderen.be/ns/generiek#lokaleIdentificator> "0207367588" ;
|
||||
<http://mu.semte.ch/vocabularies/core/uuid> "12028344-1808-4ac1-81e0-443beaab6684" .
|
||||
|
||||
<http://data.lblod.info/id/identificatoren/10f45315-05d9-409b-b7fd-b8f323ced0d2>
|
||||
<https://data.vlaanderen.be/ns/generiek#gestructureerdeIdentificator> <http://data.lblod.info/id/gestructureerdeIdentificator/93b4be45-6225-42f3-b0d2-4a40a7741c25>;
|
||||
a <http://www.w3.org/ns/adms#Identifier> ;
|
||||
<http://www.w3.org/2004/02/skos/core#notation> "OVO-nummer" ;
|
||||
<http://mu.semte.ch/vocabularies/core/uuid> "10f45315-05d9-409b-b7fd-b8f323ced0d2" .
|
||||
|
||||
<http://data.lblod.info/id/gestructureerdeIdentificator/93b4be45-6225-42f3-b0d2-4a40a7741c25>
|
||||
a <https://data.vlaanderen.be/ns/generiek#GestructureerdeIdentificator> ;
|
||||
<https://data.vlaanderen.be/ns/generiek#lokaleIdentificator> "OVO025819" ;
|
||||
<http://mu.semte.ch/vocabularies/core/uuid> "93b4be45-6225-42f3-b0d2-4a40a7741c25" .
|
||||
|
||||
<http://data.lblod.info/id/vestigingen/8749766d-e283-4145-8460-62360e278175>
|
||||
a <http://www.w3.org/ns/org#Site> ;
|
||||
<http://mu.semte.ch/vocabularies/core/uuid> "8749766d-e283-4145-8460-62360e278175" ;
|
||||
<http://data.lblod.info/vocabularies/erediensten/vestigingstype> <http://lblod.data.gift/concepts/f1381723dec42c0b6ba6492e41d6f5dd> ;
|
||||
<http://www.w3.org/ns/org#siteAddress> <http://data.lblod.info/id/contact-punten/14df8707-b30f-478f-8e7a-e22b046bee49> ;
|
||||
<https://data.vlaanderen.be/ns/organisatie#bestaatUit> <http://data.lblod.info/id/adressen/65e4a56c-123a-48a4-946e-be205ff69ed3> .
|
||||
|
||||
<http://data.lblod.info/id/contact-punten/14df8707-b30f-478f-8e7a-e22b046bee49>
|
||||
a <http://schema.org/ContactPoint> ;
|
||||
<http://mu.semte.ch/vocabularies/core/uuid> "14df8707-b30f-478f-8e7a-e22b046bee49" ;
|
||||
<http://schema.org/email> "contact.1060@stgilles.brussels" ;
|
||||
<http://schema.org/telephone> "tel:+3225360211" ;
|
||||
<http://schema.org/contactType> "Primary" ;
|
||||
<http://xmlns.com/foaf/0.1/page> "https://stgillis.brussels/" .
|
||||
|
||||
<http://data.lblod.info/id/adressen/65e4a56c-123a-48a4-946e-be205ff69ed3>
|
||||
a <http://www.w3.org/ns/locn#Address> ;
|
||||
<http://mu.semte.ch/vocabularies/core/uuid> "65e4a56c-123a-48a4-946e-be205ff69ed3" ;
|
||||
<https://data.vlaanderen.be/ns/adres#gemeentenaam> "Sint-Gillis" ;
|
||||
<https://data.vlaanderen.be/ns/adres#land> "België" ;
|
||||
<https://data.vlaanderen.be/ns/adres#Adresvoorstelling.huisnummer> "39" ;
|
||||
<http://www.w3.org/ns/locn#fullAddress> "Maurice Van Meenenplein 39, 1060 Sint-Gillis (bij-Brussel), België" ;
|
||||
<http://www.w3.org/ns/locn#postCode> "1060" ;
|
||||
<http://www.w3.org/ns/locn#thoroughfare> "Maurice Van Meenenplein" .
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,78 @@
|
||||
INSERT DATA {
|
||||
GRAPH <http://mu.semte.ch/graphs/public> {
|
||||
<http://data.lblod.info/id/werkingsgebieden/07e8d443-2ebb-48ca-a7e4-d57c105db465>
|
||||
a <http://www.w3.org/ns/prov#Location> ;
|
||||
<http://mu.semte.ch/vocabularies/core/uuid> "07e8d443-2ebb-48ca-a7e4-d57c105db465" ;
|
||||
<http://www.w3.org/2000/01/rdf-schema#label> "Sint-Jans-Molenbeek" ;
|
||||
<http://mu.semte.ch/vocabularies/ext/werkingsgebiedNiveau> "Gemeente" ;
|
||||
<http://www.w3.org/2004/02/skos/core#exactMatch> <http://vocab.belgif.be/auth/refnis2025/21012> .
|
||||
}
|
||||
|
||||
GRAPH <http://mu.semte.ch/graphs/shared> {
|
||||
<https://data.vlaanderen.be/id/organisatie/OVO025816>
|
||||
a <http://www.w3.org/ns/org#Organization> ,
|
||||
<http://data.vlaanderen.be/ns/besluit#Bestuurseenheid> ,
|
||||
<http://purl.org/dc/terms/Agent> ;
|
||||
<http://mu.semte.ch/vocabularies/core/uuid> "11d024c8-1128-4764-bf85-b9732696d04d" ;
|
||||
<http://www.w3.org/ns/org#classification> <http://data.vlaanderen.be/id/concept/BestuurseenheidClassificatieCode/5ab0e9b8a3b2ca7c5e000001> ;
|
||||
<http://www.w3.org/2004/02/skos/core#prefLabel> "Sint-Jans-Molenbeek" ;
|
||||
<http://www.w3.org/ns/regorg#legalName> "Sint-Jans-Molenbeek" ;
|
||||
<http://www.w3.org/ns/regorg#orgStatus> <http://lblod.data.gift/concepts/63cc561de9188d64ba5840a42ae8f0d6> .
|
||||
}
|
||||
|
||||
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
|
||||
<https://data.vlaanderen.be/id/organisatie/OVO025816>
|
||||
<http://data.vlaanderen.be/ns/besluit#werkingsgebied> <http://data.lblod.info/id/werkingsgebieden/07e8d443-2ebb-48ca-a7e4-d57c105db465> ;
|
||||
<http://www.w3.org/ns/adms#identifier> <http://data.lblod.info/id/identificatoren/019c56fd-072c-4253-836d-e4b52142f4ee> ;
|
||||
<http://www.w3.org/ns/adms#identifier> <http://data.lblod.info/id/identificatoren/24a23c41-317e-466c-a177-5cbabccc08cf> ;
|
||||
<http://www.w3.org/ns/org#hasPrimarySite> <http://data.lblod.info/id/vestigingen/9aa004da-3abd-4c5b-9b36-194cf7fcb9de> ;
|
||||
<http://purl.org/dc/terms/source> <https://data.vlaanderen.be/doc/organisatie> .
|
||||
|
||||
<http://data.lblod.info/id/identificatoren/019c56fd-072c-4253-836d-e4b52142f4ee>
|
||||
<https://data.vlaanderen.be/ns/generiek#gestructureerdeIdentificator> <http://data.lblod.info/id/gestructureerdeIdentificator/bedb852c-3bb6-4ee7-8e9a-4b3e3a66a954>;
|
||||
a <http://www.w3.org/ns/adms#Identifier> ;
|
||||
<http://www.w3.org/2004/02/skos/core#notation> "KBO nummer" ;
|
||||
<http://mu.semte.ch/vocabularies/core/uuid> "019c56fd-072c-4253-836d-e4b52142f4ee" .
|
||||
|
||||
<http://data.lblod.info/id/gestructureerdeIdentificator/bedb852c-3bb6-4ee7-8e9a-4b3e3a66a954>
|
||||
a <https://data.vlaanderen.be/ns/generiek#GestructureerdeIdentificator> ;
|
||||
<https://data.vlaanderen.be/ns/generiek#lokaleIdentificator> "0207366501" ;
|
||||
<http://mu.semte.ch/vocabularies/core/uuid> "bedb852c-3bb6-4ee7-8e9a-4b3e3a66a954" .
|
||||
|
||||
<http://data.lblod.info/id/identificatoren/24a23c41-317e-466c-a177-5cbabccc08cf>
|
||||
<https://data.vlaanderen.be/ns/generiek#gestructureerdeIdentificator> <http://data.lblod.info/id/gestructureerdeIdentificator/c0a0e2e8-cc64-4e8b-849c-b0b46509f705>;
|
||||
a <http://www.w3.org/ns/adms#Identifier> ;
|
||||
<http://www.w3.org/2004/02/skos/core#notation> "OVO-nummer" ;
|
||||
<http://mu.semte.ch/vocabularies/core/uuid> "24a23c41-317e-466c-a177-5cbabccc08cf" .
|
||||
|
||||
<http://data.lblod.info/id/gestructureerdeIdentificator/c0a0e2e8-cc64-4e8b-849c-b0b46509f705>
|
||||
a <https://data.vlaanderen.be/ns/generiek#GestructureerdeIdentificator> ;
|
||||
<https://data.vlaanderen.be/ns/generiek#lokaleIdentificator> "OVO025816" ;
|
||||
<http://mu.semte.ch/vocabularies/core/uuid> "c0a0e2e8-cc64-4e8b-849c-b0b46509f705" .
|
||||
|
||||
<http://data.lblod.info/id/vestigingen/9aa004da-3abd-4c5b-9b36-194cf7fcb9de>
|
||||
a <http://www.w3.org/ns/org#Site> ;
|
||||
<http://mu.semte.ch/vocabularies/core/uuid> "9aa004da-3abd-4c5b-9b36-194cf7fcb9de" ;
|
||||
<http://data.lblod.info/vocabularies/erediensten/vestigingstype> <http://lblod.data.gift/concepts/f1381723dec42c0b6ba6492e41d6f5dd> ;
|
||||
<http://www.w3.org/ns/org#siteAddress> <http://data.lblod.info/id/contact-punten/18835ea3-c679-4718-86a7-674e399e9722> ;
|
||||
<https://data.vlaanderen.be/ns/organisatie#bestaatUit> <http://data.lblod.info/id/adressen/7a692110-e4c3-4d00-9d65-8a2644ee34d3> .
|
||||
|
||||
<http://data.lblod.info/id/contact-punten/18835ea3-c679-4718-86a7-674e399e9722>
|
||||
a <http://schema.org/ContactPoint> ;
|
||||
<http://mu.semte.ch/vocabularies/core/uuid> "18835ea3-c679-4718-86a7-674e399e9722" ;
|
||||
<http://schema.org/email> "molenbeek@molenbeek.irisnet.be" ;
|
||||
<http://schema.org/telephone> "tel:+3224123790" ;
|
||||
<http://schema.org/contactType> "Primary" ;
|
||||
<http://xmlns.com/foaf/0.1/page> "https://www.molenbeek.irisnet.be/" .
|
||||
|
||||
<http://data.lblod.info/id/adressen/7a692110-e4c3-4d00-9d65-8a2644ee34d3>
|
||||
a <http://www.w3.org/ns/locn#Address> ;
|
||||
<http://mu.semte.ch/vocabularies/core/uuid> "7a692110-e4c3-4d00-9d65-8a2644ee34d3" ;
|
||||
<https://data.vlaanderen.be/ns/adres#gemeentenaam> "Sint-Jans-Molenbeek" ;
|
||||
<https://data.vlaanderen.be/ns/adres#land> "België" ;
|
||||
<https://data.vlaanderen.be/ns/adres#Adresvoorstelling.huisnummer> "20" ;
|
||||
<http://www.w3.org/ns/locn#fullAddress> "Graaf van Vlaanderenstraat 20, 1080 Sint-Jans-Molenbeek, België" ;
|
||||
<http://www.w3.org/ns/locn#postCode> "1080" ;
|
||||
<http://www.w3.org/ns/locn#thoroughfare> "Graaf van Vlaanderenstraat" .
|
||||
}
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user