Skip to content

Commit 548c436

Browse files
authored
Merging for v2.0.0 (#226)
1 parent bb163ff commit 548c436

File tree

102 files changed

+15838
-5002
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

102 files changed

+15838
-5002
lines changed

CHANGELOG.md

Lines changed: 48 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,36 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
77

88
## [Unreleased]
99

10+
## [2.0.0] - 2025-05-29
11+
12+
### Added
13+
14+
- configs/oslo-kg: two class-related queries.
15+
16+
### Changed
17+
18+
- configs/onto-deside: updated to project configuration 2025-04-09 (#202).
19+
- In the configuration file: per query `httpProxies` setting replaces global `httpProxy` setting (#4, #47).
20+
- Error message when query has no sources was replaced with an application message in the empty result list (#204).
21+
- configs/oslo-kg: use smaller datasets for queries.
22+
- React-admin version updated to 5.7.2 (#207).
23+
- Tool renamed to 'Miravi - a linked data viewer'; default favicon.ico and miravi.png provided (#210).
24+
- Bumped Comunica version from 3.2.3 to 4.2.0, resulting in increased execution speed of some queries (#212).
25+
Breaking change for typed literals in query configuration, "variables" field; see README for new syntax.
26+
- Removed not supported cosmetic fields from configuration file (#18).
27+
- JSON and SPARQL edit fields have syntax coloring and validation now (#142 and #143).
28+
29+
### Fixed
30+
31+
- Avoided (infinite) display of "The list is loading. Just a moment please." for queries that should show "The result list is empty.", in cases where the user does not have the right to read the involved source(s) (#209).
32+
- Result list sorting works again and the behavior is improved - see the issue for details (#216).
33+
- Loading values for variables ends with an error message if a required source is not available (#218).
34+
- When visiting a templated query with variable values defined in the URL search parameters,
35+
the resolved query is executed immediately, avoiding the delay it takes to first retrieve all options for the variables (#211).
36+
- CONSTRUCT queries work again (#222).
37+
- Config field "logoRedirectURL" is working (#17).
38+
- After modifying an existing custom query, the previous result table is updated as expected now (#137).
39+
1040
## [1.7.0] - 2025-04-09
1141

1242
### Added
@@ -223,20 +253,21 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
223253

224254
- First release
225255

226-
[1.0.0]: https://github.com/SolidLabResearch/generic-data-viewer-react-admin/releases/tag/v1.0.0
227-
[1.1.0]: https://github.com/SolidLabResearch/generic-data-viewer-react-admin/releases/tag/v1.1.0
228-
[1.1.1]: https://github.com/SolidLabResearch/generic-data-viewer-react-admin/releases/tag/v1.1.1
229-
[1.1.2]: https://github.com/SolidLabResearch/generic-data-viewer-react-admin/releases/tag/v1.1.2
230-
[1.1.3]: https://github.com/SolidLabResearch/generic-data-viewer-react-admin/releases/tag/v1.1.3
231-
[1.2.0]: https://github.com/SolidLabResearch/generic-data-viewer-react-admin/releases/tag/v1.2.0
232-
[1.2.1]: https://github.com/SolidLabResearch/generic-data-viewer-react-admin/releases/tag/v1.2.1
233-
[1.2.2]: https://github.com/SolidLabResearch/generic-data-viewer-react-admin/releases/tag/v1.2.2
234-
[1.2.3]: https://github.com/SolidLabResearch/generic-data-viewer-react-admin/releases/tag/v1.2.3
235-
[1.3.0]: https://github.com/SolidLabResearch/generic-data-viewer-react-admin/releases/tag/v1.3.0
236-
[1.3.1]: https://github.com/SolidLabResearch/generic-data-viewer-react-admin/releases/tag/v1.3.1
237-
[1.4.0]: https://github.com/SolidLabResearch/generic-data-viewer-react-admin/releases/tag/v1.4.0
238-
[1.4.1]: https://github.com/SolidLabResearch/generic-data-viewer-react-admin/releases/tag/v1.4.1
239-
[1.5.0]: https://github.com/SolidLabResearch/generic-data-viewer-react-admin/releases/tag/v1.5.0
240-
[1.6.0]: https://github.com/SolidLabResearch/generic-data-viewer-react-admin/releases/tag/v1.6.0
241-
[1.7.0]: https://github.com/SolidLabResearch/generic-data-viewer-react-admin/releases/tag/v1.7.0
242-
[Unreleased]: https://github.com/SolidLabResearch/generic-data-viewer-react-admin/compare/v1.7.0...HEAD
256+
[1.0.0]: https://github.com/SolidLabResearch/miravi-a-linked-data-viewer/releases/tag/v1.0.0
257+
[1.1.0]: https://github.com/SolidLabResearch/miravi-a-linked-data-viewer/releases/tag/v1.1.0
258+
[1.1.1]: https://github.com/SolidLabResearch/miravi-a-linked-data-viewer/releases/tag/v1.1.1
259+
[1.1.2]: https://github.com/SolidLabResearch/miravi-a-linked-data-viewer/releases/tag/v1.1.2
260+
[1.1.3]: https://github.com/SolidLabResearch/miravi-a-linked-data-viewer/releases/tag/v1.1.3
261+
[1.2.0]: https://github.com/SolidLabResearch/miravi-a-linked-data-viewer/releases/tag/v1.2.0
262+
[1.2.1]: https://github.com/SolidLabResearch/miravi-a-linked-data-viewer/releases/tag/v1.2.1
263+
[1.2.2]: https://github.com/SolidLabResearch/miravi-a-linked-data-viewer/releases/tag/v1.2.2
264+
[1.2.3]: https://github.com/SolidLabResearch/miravi-a-linked-data-viewer/releases/tag/v1.2.3
265+
[1.3.0]: https://github.com/SolidLabResearch/miravi-a-linked-data-viewer/releases/tag/v1.3.0
266+
[1.3.1]: https://github.com/SolidLabResearch/miravi-a-linked-data-viewer/releases/tag/v1.3.1
267+
[1.4.0]: https://github.com/SolidLabResearch/miravi-a-linked-data-viewer/releases/tag/v1.4.0
268+
[1.4.1]: https://github.com/SolidLabResearch/miravi-a-linked-data-viewer/releases/tag/v1.4.1
269+
[1.5.0]: https://github.com/SolidLabResearch/miravi-a-linked-data-viewer/releases/tag/v1.5.0
270+
[1.6.0]: https://github.com/SolidLabResearch/miravi-a-linked-data-viewer/releases/tag/v1.6.0
271+
[1.7.0]: https://github.com/SolidLabResearch/miravi-a-linked-data-viewer/releases/tag/v1.7.0
272+
[2.0.0]: https://github.com/SolidLabResearch/miravi-a-linked-data-viewer/releases/tag/v2.0.0
273+
[Unreleased]: https://github.com/SolidLabResearch/miravi-a-linked-data-viewer/compare/v2.0.0...HEAD

README.md

Lines changed: 46 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,13 @@
1-
# Generic Data Viewer React Admin
1+
# Miravi - a linked data viewer
22

3-
This Web app allows users to easily execute queries over multiple data sources (including Solid pods) and
3+
This Web app allows users to easily execute queries over multiple linked data sources (including Solid pods) and
44
inspect the corresponding results.
55

6+
About the name: Miravi reflects the many facets of the web — linking open and permissioned data into a unified view.
7+
Rooted in the Latin *mirari* ("to look with wonder"), it turns fragmented knowledge into meaningful insight.
8+
9+
<img src="./doc/miravi.png" width="200">
10+
611
Table of contents:
712

813
* [Preface](#preface)
@@ -13,6 +18,7 @@ Table of contents:
1318
* [Logging in](#logging-in)
1419
* [Configuration file](#configuration-file)
1520
* [Specifying sources](#specifying-sources)
21+
* [About httpProxies](#about-httpproxies)
1622
* [Adding variable type](#adding-variable-type)
1723
* [Templated queries](#templated-queries)
1824
* [Templated queries with fixed values for the template variables](#templated-queries-with-fixed-values-for-the-template-variables)
@@ -139,14 +145,8 @@ The configuration file must follow the structure shown below.
139145
"title": "Title shown at the top of the app.",
140146
"logoLocation": "Image location of the logo shown at the top of the app (relative to public folder.).",
141147
"logoRedirectURL": "The URL the Web application redirects to when a user clicks on the logo.",
142-
"mainAppColor": "The main colors used in the app, can be any CSS color.",
143-
"backgroundColor": "Background color of the app, can be any CSS color.",
144-
"titleColor": "The color of the title, can be any CSS color",
145-
"textColor": "The color of all the text in teh app body, this means all text except header and footer.",
146-
"footer": "HTML components or text that will function as the footer (will be placed in the footer div.)",
147148
"defaultIDP": "The default value used for IDP when logging in, this IDP can be manually changed in the Web app as well. ",
148-
"queryFolder": "The base location of the queries, all query locations will start from this folder (relative to public folder.)",
149-
"httpProxy": "The http proxy through which the requests will be rerouted. When left empty, the Comunica query engine will handle it. This is useful when CORS headers are not set (correctly) on the queried source.",
149+
"queryFolder": "The base location of the queries, all query locations will start from this folder (relative to public folder).",
150150
"introductionText": "The text that the app shows on the dashboard, which the app also shows when you first open it.",
151151
"queryGroups" : [
152152
{
@@ -165,25 +165,36 @@ The configuration file must follow the structure shown below.
165165
"icon": "The key to the icon for the query. This is optional and a default menu icon will be used when left empty.",
166166
"comunicaContext": {
167167
"sources": "Initial array of sources over which the query should be executed",
168-
"useProxy": "True or false, whether the query should be executed through the proxy or not. This field is optional and defaults to false.",
169168
... any other field that can be used in the Comunica query engine https://comunica.dev/docs/query/advanced/context/
170169
},
171170
"sourcesIndex": {
172171
"url": "URL of the publicly available RDF resource acting as an index file for more sources over which the query should be executed",
173172
"queryLocation": "Path to the location, relative to 'queryFolder', of the (auxiliary) query that yields the sources from above RDF resource"
174173
},
175174
"variables": {
176-
"variableExampleString": ["\"String1\"", "\"String2\""],
177-
"variableExampleUri": ["<https://example.com/uri1>", "<https://example.com/uri2>"],
178-
"variableExampleInteger": ["1", "2"]
175+
"variableExampleStrings": ["\"String1\"", "\"String2\""],
176+
"variableExampleUris": ["<https://example.com/uri1>", "<https://example.com/uri2>"],
177+
"variableExampleLangStrings": ["\"String1\"@en", "\"Chaîne2\"@fr"],
178+
"variableExampleTypedLiterals": [
179+
"\"1\"^^<http://www.w3.org/2001/XMLSchema#integer>",
180+
"\"1.3\"^^<http://www.w3.org/2001/XMLSchema#decimal>",
181+
"\"1.5E6\"^^<http://www.w3.org/2001/XMLSchema#double>",
182+
"\"true\"^^<http://www.w3.org/2001/XMLSchema#boolean>"
183+
]
179184
},
180185
"indirectVariables": {
181186
"queryLocations": [
182187
"Path to the location, relative to 'queryFolder' of a query yielding some template variable values",
183188
...
184189
]
185190
},
186-
191+
"httpProxies": [
192+
{
193+
"urlStart": "all sources whose url start with this string will be rerouted",
194+
"httpProxy": "http proxy through which these sources will be rerouted - see also documentation 'About httpProxies' below."
195+
}
196+
...
197+
],
187198
"askQuery": {
188199
"trueText": "The text that is to be shown when the query result is true (in ASK queries).",
189200
"falseText": "The text that is to be shown when the query result is false (in ASK queries)."
@@ -208,6 +219,23 @@ The (auxiliary) query provided in `sourceIndex.queryLocation` is executed on `so
208219
If `sourceIndex` is used and there is no `comunicaContext.lenient` property found, one will be created with value `true`.
209220
This makes sure that the (main) query can succeed if not all obtained sources are accessible.
210221

222+
### About httpProxies
223+
224+
Per query, an optional array of `httpProxies` can be specified.
225+
An http proxy can be used to solve CORS issues in case CORS headers are not set (correctly) on some queried sources.
226+
Note that the involved sources can include those specified in `comunicaContext.sources` as well as those described in and found through `sourceIndex`.
227+
228+
We support static proxies such as [cors-anywhere](https://www.npmjs.com/package/cors-anywhere) that take the URL from the path.
229+
230+
Each element of such array contains a property `httpProxies` and a property `urlStart`.
231+
232+
We simply prepend the `httpProxy` value before the URL of each source whose URL starts with the string in the corresponding `urlStart` value.
233+
234+
Example: if
235+
`httpProxies[i].urlStart` is set to `http://www.example.com/path-xyz` and
236+
`httpProxies[i].httpProxy` is set to `http://myproxy.org/`,
237+
source `http://www.example.com/path-xyz-source-xyz` will be accessed as `http://myproxy.org/http://www.example.com/path-xyz-source-xyz`.
238+
211239
### Adding variable type
212240

213241
When executing a query, it gives us either a URL, a literal value or [a blank node](https://www.w3.org/TR/rdf12-concepts/#section-blank-nodes).
@@ -365,9 +393,10 @@ The easiest way to add your own configuration is:
365393
1. Get inspired by the configuration in `main/configs/demo`.
366394
2. Choose your `<your-config>`: a string obeying regex `[a-z0-9-]+`; directory `main/configs/<your-config>` should not yet be in use.
367395
3. Add your own queries in the `main/configs/<your-config>/public/queries` directory and in general, your own resources in the `main/configs/<your-config>/public` directory.
368-
4. Write your own `main/configs/<your-config>/config.json` file, following the [configuration file documentation above](#configuration-file).
369-
5. Run or build as documented above for the `demo` configuration, of course now using `<your-config>`.
370-
6. Consider a pull request to add your configuration to this repo.
396+
4. Add your own additional resources in `main/configs/<your-config>/public`, if the defaults you'll get from `main/config-defaults/public` are not satisfactory for you.
397+
5. Write your own `main/configs/<your-config>/config.json` file, following the [configuration file documentation above](#configuration-file).
398+
6. Run or build as documented above for the `demo` configuration, of course now using `<your-config>`.
399+
7. Consider a pull request to add your configuration to this repo.
371400

372401
### Testing
373402

RELEASE.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,8 @@ and [CHANGELOG.md](./CHANGELOG.md) should reflect all modifications under the `#
2020
In [CHANGELOG.md](./CHANGELOG.md):
2121

2222
* Create the new release section by adding a new release title line below the `## [Unreleased]` title line. Example: `## [1.7.0] - 2025-04-09`.
23-
* Add a new release link line near the end of the file. Example: `[1.7.0]: https://github.com/SolidLabResearch/generic-data-viewer-react-admin/releases/tag/v1.7.0`.
24-
* Update the `[Unreleased]` link in the bottom line to use the new release tag. Example: `[Unreleased]: https://github.com/SolidLabResearch/generic-data-viewer-react-admin/compare/v1.7.0...HEAD`
23+
* Add a new release link line near the end of the file. Example: `[1.7.0]: https://github.com/SolidLabResearch/miravi-a-linked-data-viewer/releases/tag/v1.7.0`.
24+
* Update the `[Unreleased]` link in the bottom line to use the new release tag. Example: `[Unreleased]: https://github.com/SolidLabResearch/miravi-a-linked-data-viewer/compare/v1.7.0...HEAD`
2525

2626
Enter the release tag in the version string in [/main/src/version.js](./main/src/version.js).
2727

doc/miravi.png

1.17 MB
Loading
27.3 KB
Binary file not shown.
19.4 KB
Loading

main/configs/demo/config.json

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,10 @@
11
{
2-
"title": "Generic Data Viewer",
3-
"logoLocation": "images/IDLab-logo.png",
4-
"logoRedirectURL": "https://idlab.technology/",
5-
"mainAppColor": "lightgray",
6-
"backgroundColor": "#fff",
7-
"titleColor": "black",
8-
"textColor": "#1976D2",
2+
"title": "Miravi - a linked data viewer",
3+
"logoLocation": "images/miravi.png",
4+
"logoRedirectURL": "https://github.com/SolidLabResearch/miravi-a-linked-data-viewer",
95
"queryFolder": "queries",
10-
"httpProxy": "http://localhost:8000/",
116
"showMilliseconds": false,
127
"defaultIDP": "http://localhost:8080",
13-
"footer": "<p><a href='https://idlab.technology/'>IDLab</a> - <a href='https://www.imec.be/nl'>imec</a> - <a href='https://www.ugent.be/'>UGent</a></p>",
148
"introductionText": "Please log in as the appropriate actor and make your choice in the menu on the left.",
159
"queryGroups": [
1610
{
@@ -33,9 +27,14 @@
3327
"comunicaContext": {
3428
"sources": [
3529
"http://localhost:8001/example/idols"
36-
],
37-
"useProxy": true
38-
}
30+
]
31+
},
32+
"httpProxies": [
33+
{
34+
"urlStart": "http://localhost:8001",
35+
"httpProxy": "http://localhost:8000/"
36+
}
37+
]
3938
},
4039
{
4140
"id": "1010",

main/configs/demo/public/favicon.ico

-2.48 KB
Binary file not shown.
-37.9 KB
Binary file not shown.

0 commit comments

Comments
 (0)