Skip to content

Commit cfb2bc6

Browse files
authored
Merging for v2.1.0 (#237)
1 parent e220705 commit cfb2bc6

File tree

18 files changed

+319
-100
lines changed

18 files changed

+319
-100
lines changed

CHANGELOG.md

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

88
## [Unreleased]
99

10+
## [2.1.0] - 2025-09-25
11+
12+
### Added
13+
14+
- Screencast for the Onto-DESIDE use case (#228).
15+
- Presentation as presented during the SemDev Workhop co-located with SEMANTiCS 2025 (#234).
16+
17+
### Fixed
18+
19+
- Link in table result header is no longer arbitrary if more than one predicate has the same object (#230.)
20+
- Avoided "Error getting variable options..." in templated queries with indirect sources to which the user has no read access (#231).
21+
- Corrected fetch status in templated queries with indirect sources to which the user has no read access (#232).
22+
1023
## [2.0.0] - 2025-05-29
1124

1225
### Added
@@ -270,4 +283,5 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
270283
[1.6.0]: https://github.com/SolidLabResearch/miravi-a-linked-data-viewer/releases/tag/v1.6.0
271284
[1.7.0]: https://github.com/SolidLabResearch/miravi-a-linked-data-viewer/releases/tag/v1.7.0
272285
[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
286+
[2.1.0]: https://github.com/SolidLabResearch/miravi-a-linked-data-viewer/releases/tag/v2.1.0
287+
[Unreleased]: https://github.com/SolidLabResearch/miravi-a-linked-data-viewer/compare/v2.1.0...HEAD

README.md

Lines changed: 25 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,13 @@ Rooted in the Latin *mirari* ("to look with wonder"), it turns fragmented knowle
88

99
<img src="./doc/miravi.png" width="200">
1010

11+
Miravi is fully configurable. In the illustration below, [this configuration](./main/configs/onto-deside/config.json) is at work.
12+
13+
![A screencast about configs/onto-deside](doc/screencast-onto-deside.gif)
14+
15+
For a more complete presentation of Miravi and description of the design choices, please have a look at our
16+
[presentation as presented during the SemDev Workhop co-located with SEMANTiCS 2025](./doc/slides-miravi-semdev-2025.pdf).
17+
1118
Table of contents:
1219

1320
* [Preface](#preface)
@@ -27,9 +34,10 @@ Table of contents:
2734
* [Custom queries](#custom-queries)
2835
* [Representation Mapper](#representation-mapper)
2936
* [Advanced topics](#advanced-topics)
37+
* [Adding your own configuration](#adding-your-own-configuration)
3038
* [Converting custom queries into common queries](#converting-custom-queries-into-common-queries)
39+
* [Illustrations](#illustrations)
3140
* [For developers](#for-developers)
32-
* [Adding your own configuration](#adding-your-own-configuration)
3341
* [Testing](#testing)
3442
* [Additional prerequisites](#additional-prerequisites)
3543
* [Testing the production version](#testing-the-production-version)
@@ -366,6 +374,18 @@ They've already got styling matching that of `react-admin` and are easy to use.
366374

367375
## Advanced topics
368376

377+
### Adding your own configuration
378+
379+
The easiest way to add your own configuration is:
380+
381+
1. Get inspired by the configuration in `main/configs/demo`.
382+
2. Choose your `<your-config>`: a string obeying regex `[a-z0-9-]+`; directory `main/configs/<your-config>` should not yet be in use.
383+
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.
384+
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.
385+
5. Write your own `main/configs/<your-config>/config.json` file, following the [configuration file documentation above](#configuration-file).
386+
6. Run or build as documented above for the `demo` configuration, of course now using `<your-config>`.
387+
7. Consider a pull request to add your configuration to this repo.
388+
369389
### Converting custom queries into common queries
370390

371391
Once you have your basic configuration working, you may extend it with custom queries interactively with the query editor
@@ -384,19 +404,12 @@ Follow these steps to get started:
384404
5. **Adapt any other properties** according to your preferences.
385405
6. **Save `main/configs/<your-config>/config.json`**, rerun or rebuild and refresh your browser to test.
386406

387-
## For developers
407+
## Illustrations
388408

389-
### Adding your own configuration
409+
* [A screencast about configs/onto-deside](doc/screencast-onto-deside.gif)
410+
* [Presentation as presented during the SemDev Workhop co-located with SEMANTiCS 2025](./doc/slides-miravi-semdev-2025.pdf)
390411

391-
The easiest way to add your own configuration is:
392-
393-
1. Get inspired by the configuration in `main/configs/demo`.
394-
2. Choose your `<your-config>`: a string obeying regex `[a-z0-9-]+`; directory `main/configs/<your-config>` should not yet be in use.
395-
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.
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.
412+
## For developers
400413

401414
### Testing
402415

doc/screencast-onto-deside.gif

1.97 MB
Loading

doc/slides-miravi-semdev-2025.pdf

5.74 MB
Binary file not shown.

main/configs/test/config.json

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -444,6 +444,38 @@
444444
"queryLocation": "/sourceQueries/index_example_common_lt.rq"
445445
}
446446
},
447+
{
448+
"id": "9081",
449+
"queryGroupId": "gr-test",
450+
"queryLocation": "component_material_one_variable.rq",
451+
"name": "Component and materials - 1 variable (indirect source & indirect variables; one unauthorized source)",
452+
"description": "Query components (including details about materials) with the sources obtained from index files and variables from the sources. One unauthorized indirect source, to check lenient while getting variable options.",
453+
"indirectVariables": {
454+
"queryLocations": [
455+
"variableQueries/components_name_variable.rq"
456+
]
457+
},
458+
"sourcesIndex": {
459+
"url": "http://localhost:8080/example/index-example-with-unauthorized-source-lt",
460+
"queryLocation": "/sourceQueries/index_example_common_lt.rq"
461+
}
462+
},
463+
{
464+
"id": "9082",
465+
"queryGroupId": "gr-test",
466+
"queryLocation": "component_material_one_variable.rq",
467+
"name": "Component and materials - 1 variable (indirect source & indirect variables; no indirect sources found)",
468+
"description": "Query components (including details about materials) with zero sources obtained from index files and variables from the sources.",
469+
"indirectVariables": {
470+
"queryLocations": [
471+
"variableQueries/components_name_variable.rq"
472+
]
473+
},
474+
"sourcesIndex": {
475+
"url": "http://localhost:8080/example/index-example-texon-only-lt",
476+
"queryLocation": "/sourceQueries/index_example_common_lt_bad.rq"
477+
}
478+
},
447479
{
448480
"id": "9090",
449481
"queryGroupId": "gr-test",
@@ -549,6 +581,32 @@
549581
"http://localhost:8080/example/favourite-musicians-file-does-not-exist"
550582
]
551583
}
584+
},
585+
{
586+
"id": "9200",
587+
"queryGroupId": "gr-test",
588+
"queryLocation": "schema_name.rq",
589+
"name": "A query that looks for names that are the object of predicate schema:name",
590+
"description": "Tests a single link in the 'name' column header.",
591+
"comunicaContext": {
592+
"sources": [
593+
"http://localhost:8080/example/names-labels"
594+
],
595+
"lenient": true
596+
}
597+
},
598+
{
599+
"id": "9201",
600+
"queryGroupId": "gr-test",
601+
"queryLocation": "schema_name_rdfs_label.rq",
602+
"name": "A query that looks for names that are both the objects of predicates schema:name and rdfs:label",
603+
"description": "Tests two links in the 'name' column header.",
604+
"comunicaContext": {
605+
"sources": [
606+
"http://localhost:8080/example/names-labels"
607+
],
608+
"lenient": true
609+
}
552610
}
553611
]
554612
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
PREFIX schema: <http://schema.org/>
2+
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
3+
4+
SELECT ?name WHERE {
5+
?s schema:name ?name.
6+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
PREFIX schema: <http://schema.org/>
2+
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
3+
4+
SELECT ?name WHERE {
5+
?s schema:name ?name.
6+
?s rdfs:label ?name.
7+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
2+
3+
SELECT DISTINCT ?source WHERE {
4+
?s rdfs:seeAlso_hihihahahoho ?source.
5+
}

main/src/components/ActionBar/SourceFetchStatusIcon/SourceFetchStatusIcon.jsx

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import PendingIcon from '@mui/icons-material/Pending';
12
import CheckIcon from '@mui/icons-material/Check';
23
import CancelIcon from "@mui/icons-material/Cancel";
34
import RemoveCircleOutlineIcon from '@mui/icons-material/RemoveCircleOutline';
@@ -14,7 +15,13 @@ import comunicaEngineWrapper from '../../../comunicaEngineWrapper/comunicaEngine
1415
function SourceFetchStatusIcon({ source }) {
1516
const status = comunicaEngineWrapper.getFetchStatusNumber(source);
1617

17-
if (comunicaEngineWrapper.getFetchSuccess(source)) {
18+
if (comunicaEngineWrapper.getFetchSuccess(source) === undefined) {
19+
return (
20+
<Tooltip title="Not fetched">
21+
<PendingIcon size="small" />
22+
</Tooltip>
23+
);
24+
} else if (comunicaEngineWrapper.getFetchSuccess(source)) {
1825
return (
1926
<Tooltip title="Fetch was successful">
2027
<CheckIcon size="small" />

main/src/components/ListResultTable/QueryResultList/TableHeader/TableHeader.jsx

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -60,16 +60,18 @@ function TableHeader({ children }) {
6060
</span>
6161
</Tooltip>}
6262
{!!variableOntology && variableOntology[child.props.source] && (
63-
<Link
64-
target="_blank"
65-
href={variableOntology[child.props.source]}
66-
sx={{ height: "100%", margin: "0 5px", "& > *": { verticalAlign: "middle" } }}
67-
>
68-
<LinkIcon
69-
fontSize="small"
70-
sx={{ height: "100%", color: "gray" }}
71-
/>
72-
</Link>
63+
variableOntology[child.props.source].map((link) => (
64+
<Link
65+
target="_blank"
66+
href={link}
67+
sx={{ height: "100%", margin: "0 0 0 5px", "& > *": { verticalAlign: "middle" } }}
68+
>
69+
<LinkIcon
70+
fontSize="small"
71+
sx={{ height: "100%", color: "gray" }}
72+
/>
73+
</Link>
74+
))
7375
)}
7476
{sort.field === child.props.source && (
7577
<>

0 commit comments

Comments
 (0)