graphdb-workbench-tests 2.5.1 → 2.6.0-RC1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (114) hide show
  1. package/fixtures/graphdb-import/resource-test-data.ttl +99 -0
  2. package/fixtures/graphql-editor/default-query-response.json +517 -0
  3. package/fixtures/guides/guides.json +764 -0
  4. package/fixtures/guides/movies.ttl +629 -0
  5. package/fixtures/guides/starwars.ttl +4384 -0
  6. package/fixtures/locale-en.json +44 -10
  7. package/fixtures/namespaces/ontotext-generated-namespace.json +22 -0
  8. package/fixtures/queries/empty-query-response.json +11 -0
  9. package/integration/cluster/cluster-management.spec.js +1 -2
  10. package/integration/explore/graphs.overview.spec.js +4 -2
  11. package/integration/explore/similariti-index-create.spec.js +333 -0
  12. package/integration/explore/similarity-index.spec.js +88 -0
  13. package/integration/explore/similarity.spec.js +180 -56
  14. package/integration/explore/visual-graph/graphs-config.spec.js +453 -0
  15. package/integration/explore/{visual.graph.spec.js → visual-graph/visual.graph.spec.js} +146 -347
  16. package/integration/guides/movies-interactive-guide.spec.js +73 -0
  17. package/integration/guides/star-wars-interactive-guide.js +60 -0
  18. package/integration/home/language-change.spec.js +3 -3
  19. package/integration/import/import.user.data.spec.js +2 -0
  20. package/integration/resource/resource.spec.js +357 -0
  21. package/integration/setup/aclmanagement/create-rule.spec.js +88 -11
  22. package/integration/setup/aclmanagement/delete-rule.spec.js +6 -4
  23. package/integration/setup/aclmanagement/edit-rule.spec.js +13 -8
  24. package/integration/setup/aclmanagement/render-rules.spec.js +4 -2
  25. package/integration/setup/aclmanagement/reorder-rules.spec.js +5 -3
  26. package/integration/setup/aclmanagement/revert-rules.spec.js +4 -3
  27. package/integration/setup/aclmanagement/scopes.spec.js +220 -0
  28. package/integration/setup/aclmanagement/update-rules.spec.js +17 -9
  29. package/integration/setup/jdbc-create.spec.js +330 -0
  30. package/integration/setup/jdbc.spec.js +78 -154
  31. package/integration/setup/my-settings.spec.js +9 -41
  32. package/integration/setup/sparql-template-create.js +150 -0
  33. package/integration/setup/sparql-templates.spec.js +82 -146
  34. package/integration/sparql-editor/actions/execute-query.spec.js +44 -0
  35. package/integration/sparql-editor/actions/expand-results-over-sameas.spec.js +136 -0
  36. package/integration/sparql-editor/actions/include-inferred-statements.spec.js +100 -0
  37. package/integration/sparql-editor/actions/inferred-sameas.spec.js +47 -0
  38. package/integration/sparql-editor/actions/save-query.spec.js +70 -0
  39. package/integration/sparql-editor/actions/show-saved-queries.spec.js +61 -0
  40. package/integration/sparql-editor/internationalization.spec.js +41 -0
  41. package/integration/sparql-editor/saved-query/abort-query.spec.js +51 -0
  42. package/integration/sparql-editor/saved-query/delete-query.spec.js +56 -0
  43. package/integration/sparql-editor/saved-query/edit-query.spec.js +68 -0
  44. package/integration/sparql-editor/saved-query/share-query.spec.js +78 -0
  45. package/integration/sparql-editor/sparql-editor.spec.js +55 -0
  46. package/integration/sparql-editor/yasgui-tabs.spec.js +107 -0
  47. package/integration/sparql-editor/yasr/download-as.spec.js +54 -0
  48. package/integration/sparql-editor/yasr/pagination.spec.js +234 -0
  49. package/integration/sparql-editor/yasr/table-plugin.spec.js +39 -0
  50. package/integration/sparql-editor/yasr/toolbar/visual-graph-button.spec.js +57 -0
  51. package/integration-flaky/explore/visual.graph.spec.js +3 -2
  52. package/integration-flaky/setup/sparql-template-create.js +139 -0
  53. package/integration-flaky/sparql-editor/actions/execute-update-query.spec.js +89 -0
  54. package/integration-flaky/sparql-editor/actions/share-query.spec.js +84 -0
  55. package/integration-flaky/sparql-editor/lucene-connector.spec.js +62 -0
  56. package/integration-flaky/sparql-editor/plugins/error-plugin.spec.js +83 -0
  57. package/integration-flaky/sparql-editor/yasr/table-plugin.spec.js +81 -0
  58. package/package.json +3 -1
  59. package/steps/application-steps.js +5 -0
  60. package/steps/autocomplete-steps.js +10 -0
  61. package/steps/error-steps.js +9 -0
  62. package/steps/explore/graphs-overview-steps.js +24 -0
  63. package/steps/explore/similarity-index-create-steps.js +113 -0
  64. package/steps/explore/similarity-indexes-steps.js +18 -0
  65. package/steps/guides/guide-dialog-steps.js +38 -0
  66. package/steps/guides/guide-steps.js +278 -0
  67. package/steps/guides/movies-guide-steps.js +241 -0
  68. package/steps/guides/star-wars-guide-steps.js +188 -0
  69. package/steps/import-steps.js +16 -0
  70. package/steps/language-selector-steps.js +22 -0
  71. package/steps/loader-steps.js +10 -0
  72. package/steps/lucene-connector-steps.js +43 -0
  73. package/steps/main-menu-steps.js +67 -0
  74. package/steps/repository-selector-steps.js +26 -0
  75. package/steps/repository-steps.js +4 -0
  76. package/steps/resource/resource-edit-steps.js +111 -0
  77. package/steps/resource/resource-steps.js +149 -0
  78. package/steps/setup/acl-management-steps.js +193 -35
  79. package/steps/setup/jdbc-create-steps.js +97 -0
  80. package/steps/setup/jdbc-steps.js +42 -0
  81. package/steps/setup/sparql-create-update-steps.js +55 -0
  82. package/steps/setup/sparql-templates-steps.js +38 -0
  83. package/steps/sparql-editor-steps.js +20 -0
  84. package/steps/sparql-steps.js +0 -6
  85. package/steps/visual-graph-steps.js +365 -6
  86. package/steps/yasgui/confirmation-dialog-steps.js +13 -0
  87. package/steps/yasgui/pagination-steps.js +47 -0
  88. package/steps/yasgui/plugin/error-plugin-steps.js +30 -0
  89. package/steps/yasgui/save-query-dialog.js +61 -0
  90. package/steps/yasgui/saved-queries-dialog.js +29 -0
  91. package/steps/yasgui/saved-query.js +25 -0
  92. package/steps/yasgui/share-saved-query-dialog.js +25 -0
  93. package/steps/yasgui/table-plugin-steps.js +29 -0
  94. package/steps/yasgui/yasgui-loader.js +10 -0
  95. package/steps/yasgui/yasgui-steps.js +191 -0
  96. package/steps/yasgui/yasqe-steps.js +187 -0
  97. package/steps/yasgui/yasr-steps.js +108 -0
  98. package/stubs/namespace-stubs.js +10 -0
  99. package/stubs/repositories-stub.js +58 -0
  100. package/stubs/security-stubs.js +69 -0
  101. package/stubs/yasgui/connectors-stubs.js +12 -0
  102. package/stubs/yasgui/query-stubs.js +253 -0
  103. package/support/index.js +3 -0
  104. package/support/repository-commands.js +5 -5
  105. package/support/sparql-commands.js +1 -1
  106. package/support/visual-graph-commands.js +25 -0
  107. package/integration/sparql/main.menu.spec.js +0 -232
  108. package/integration/sparql/sparql-error-handling.spec.js +0 -74
  109. package/integration/sparql/sparql-language-change.spec.js +0 -58
  110. package/integration/sparql/sparql-result-formating.spec.js +0 -84
  111. package/integration/sparql/sparql.menu.spec.js +0 -1253
  112. package/integration-flaky/setup/sparql-templates.spec.js +0 -125
  113. package/integration-flaky/sparql/sparql-language-change.spec.js +0 -45
  114. package/integration-flaky/sparql/sparql.menu.spec.js +0 -75
@@ -0,0 +1,764 @@
1
+ [
2
+ {
3
+ "guideName": {
4
+ "en": "1 The Star Wars guide",
5
+ "fr": "⚒Le guide sur Star Wars"
6
+ },
7
+ "guideDescription": {
8
+ "en": "The Star Wars guide is a beginner's guide showing repository creation, importing RDF data from a file, starting to explore data from the visual graph, and executing SPARQL queries. It takes approximately 30 minutes to complete.",
9
+ "fr": "⚒Un guide de base montrant la création de répertoire, l'importation de RDF à partir d'un fichier, un graphique visuel et certaines requêtes SPARQL."
10
+ },
11
+ "guideLevel": 0,
12
+ "guideOrder": 1,
13
+ "options": {
14
+ "repositoryIdBase": "starwars"
15
+ },
16
+ "steps": [
17
+ {
18
+ "guideBlockName": "welcome"
19
+ },
20
+ {
21
+ "guideBlockName": "create-repository"
22
+ },
23
+ {
24
+ "guideBlockName": "select-repository-dropdown"
25
+ },
26
+ {
27
+ "guideBlockName": "enable-autocomplete"
28
+ },
29
+ {
30
+ "guideBlockName": "import-rdf-file",
31
+ "options": {
32
+ "resourcePath": "starwars",
33
+ "resourceFile": "starwars.ttl"
34
+ }
35
+ },
36
+ {
37
+ "guideBlockName": "visual-graph",
38
+ "options": {
39
+ "easyGraphInputText": "lu",
40
+ "iri": "https://swapi.co/resource/human/1",
41
+ "iriLabel": "Luke Skywalker"
42
+ }
43
+ },
44
+ {
45
+ "guideBlockName": "visual-graph-node-focus",
46
+ "options": {
47
+ "iri": "https://swapi.co/resource/human/1",
48
+ "iriLabel": "Luke Skywalker"
49
+ }
50
+ },
51
+ {
52
+ "guideBlockName": "visual-graph-link-focus",
53
+ "options": {
54
+ "fromIri": "https://swapi.co/resource/human/1",
55
+ "fromIriLabel": "Luke Skywalker",
56
+ "toIri": "https://swapi.co/vocabulary/Character",
57
+ "toIriLabel": "Character",
58
+ "iriLabel": "type",
59
+ "extraContent": {
60
+ "en": "This tells us that one of the RDF types for <b>{{fromIriLabel}}</b> is <b>{{toIriLabel}}</b>.",
61
+ "fr": "⚒Cela nous indique que l'un des types RDF pour <b>{{fromIriLabel}}</b> est <b>{{toIriLabel}}</b>."
62
+ }
63
+ }
64
+ },
65
+ {
66
+ "guideBlockName": "visual-graph-node-focus",
67
+ "options": {
68
+ "iri": "https://swapi.co/vocabulary/Mammal",
69
+ "iriLabel": "Mammal",
70
+ "content": "",
71
+ "extraContent": {
72
+ "en": "<b>{{iriLabel}}</b> is another RDF type for <b>Luke Skywalker</b>.",
73
+ "fr": "⚒<b>{{iriLabel}}</b> est un autre type RDF pour <b>Luke Skywalker</b>."
74
+ }
75
+ }
76
+ },
77
+ {
78
+ "guideBlockName": "visual-graph-link-focus",
79
+ "options": {
80
+ "fromIri": "https://swapi.co/resource/human/1",
81
+ "fromIriLabel": "Luke Skywalker",
82
+ "toIri": "https://swapi.co/resource/vehicle/14",
83
+ "toIriLabel": "Snowspeeder",
84
+ "iriLabel": "vehicle",
85
+ "content": "",
86
+ "extraContent": {
87
+ "en": "This connection tells us that <b>{{fromIriLabel}}</b> has a <b>{{iriLabel}}</b> called <b>{{toIriLabel}}</b>. In addition, it shows the reverse relation <b>pilot</b>, which links <b>{{toIriLabel}}</b> to <b>{{fromIriLabel}}</b>.",
88
+ "fr": "⚒Cette connexion nous indique que <b>{{fromIriLabel}}</b> a un <b>{{iriLabel}}</b> appelé <b>{{toIriLabel}}</b>. De plus, il montre la relation inverse <b>pilot</b>, qui relie <b>{{toIriLabel}}</b> à <b>{{fromIriLabel}}</b>."
89
+ }
90
+ }
91
+ },
92
+ {
93
+ "guideBlockName": "visual-graph-node-focus",
94
+ "options": {
95
+ "fromIriLabel": "Luke Skywalker",
96
+ "iri": "https://swapi.co/resource/vehicle/30",
97
+ "iriLabel": "Imperial Speeder Bike",
98
+ "content": "",
99
+ "extraContent": {
100
+ "en": "<b>{{fromIriLabel}}</b> has another <b>vehicle</b> called <b>{{iriLabel}}</b>. Again, the reverse relation <b>pilot</b> links <b>{{iriLabel}}</b> to <b>{{fromIriLabel}}</b>.",
101
+ "fr": "⚒<b>{{fromIriLabel}}</b> a un autre <b>vehicle</b> appelé <b>{{iriLabel}}</b>. Encore une fois, la relation inverse <b>pilot</b> relie <b>{{iriLabel}}</b> à <b>{{fromIriLabel}}</b>."
102
+ }
103
+ }
104
+ },
105
+ {
106
+ "guideBlockName": "visual-graph-properties",
107
+ "options": {
108
+ "iri": "https://swapi.co/resource/film/1",
109
+ "iriLabel": "A New Hope",
110
+ "focusProperties": [
111
+ {
112
+ "property": "types",
113
+ "message": {
114
+ "en": "We can see that <b>{{iriLabel}}</b> has a single type, <b>voc:Film</b>.",
115
+ "fr": "⚒Nous pouvons voir que <b>{{iriLabel}}</b> a un seul type, <b>voc:Film</b>."
116
+ }
117
+ },
118
+ {
119
+ "property": "voc:releaseDate",
120
+ "message": {
121
+ "en": "This shows the actual release date of <b>{{iriLabel}}</b>."
122
+ }
123
+ },
124
+ {
125
+ "property": "voc:episodeId",
126
+ "skipGenericMessage": true,
127
+ "message": {
128
+ "en": "The property <b>voc:episodeId</b> tells us that <b>{{iriLabel}}</b> was envisioned as the 4th movie in the series, even though it was the first to be released in 1977."
129
+ }
130
+ }
131
+ ]
132
+ }
133
+ },
134
+ {
135
+ "guideBlockName": "visual-graph-expand",
136
+ "options": {
137
+ "iri": "https://swapi.co/resource/film/1",
138
+ "iriLabel": "A New Hope"
139
+ }
140
+ },
141
+ {
142
+ "guideBlockName": "visual-graph-node-focus",
143
+ "options": {
144
+ "iri": "https://swapi.co/resource/droid/2",
145
+ "iriLabel": "C-3PO",
146
+ "content": "",
147
+ "extraContent": {
148
+ "en": "Node expansion enriches the graph by showing nodes connected to the expanded node, such as the character <b>{{iriLabel}}</b>.",
149
+ "fr": "⚒L'expansion des nœuds enrichit le graphique en montrant les nœuds connectés au nœud étendu, comme le caractère <b>{{iriLabel}}</b>."
150
+ }
151
+ }
152
+ },
153
+ {
154
+ "guideBlockName": "visual-graph-node-focus",
155
+ "options": {
156
+ "iri": "https://swapi.co/resource/planet/1",
157
+ "iriLabel": "Tatooine",
158
+ "content": "",
159
+ "extraContent": {
160
+ "en": "The planet <b>{{iriLabel}}</b>, which was already shown before expanding, is now linked to both <b>Luke Skywalker</b> and <b>A New Hope</b>.",
161
+ "fr": "⚒La planète <b>{{iriLabel}}</b>, qui était déjà montrée avant de s'agrandir, est maintenant liée à la fois à <b>Luke Skywalker</b> et à <b>A New Hope</b>."
162
+ }
163
+ }
164
+ },
165
+ {
166
+ "guideBlockName": "execute-sparql-query",
167
+ "options": {
168
+ "queries": [
169
+ {
170
+ "query": "SELECT * {\n <https://swapi.co/resource/human/1> ?p ?o\n}\n",
171
+ "queryExtraContent": {
172
+ "en": "The query selects RDF statements whose <i>subject</i> is <b>Luke Skywalker</b> (identified by the IRI <b>https://swapi.co/resource/human/1</b>).",
173
+ "fr": "⚒La requête sélectionne les déclarations RDF dont le <i>sujet</i> est <b>Luke Skywalker</b> (identifié par l'IRI <b>https://swapi.co/resource/human/1</b> )."
174
+ },
175
+ "resultExtraContent": {
176
+ "en": "The variables <b>?p</b> and <b>?o</b> correspond to the <i>predicate</i> and <i>object</i> of the RDF statements.",
177
+ "fr": "⚒Les variables <b>?p</b> et <b>?o</b> correspondent au <i>prédicat</i> et à l'<i>objet</i> des déclarations RDF."
178
+ }
179
+ },
180
+ {
181
+ "query": "PREFIX voc: <https://swapi.co/vocabulary/>\nPREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>\n\nSELECT * {\n <https://swapi.co/resource/human/1> voc:film ?movie .\n ?movie rdfs:label ?movieName .\n}\n",
182
+ "queryExtraContent": {
183
+ "en": "The query selects all movies where <b>Luke Skywalker</b> is one of the characters and illustrates the simplest SPARQL join, using the same variable <b>?movie</b> in two different statement patterns.",
184
+ "fr": "⚒La requête sélectionne tous les films où <b>Luke Skywalker</b> est l'un des personnages et illustre la jointure SPARQL la plus simple, en utilisant la même variable <b>?movie</b> dans deux modèles d'instructions différents."
185
+ },
186
+ "resultExtraContent": {
187
+ "en": "The variables <b>?movie</b> and <b>?movieName</b> contain each movie's IRI and name respectively.",
188
+ "fr": "⚒Les variables <b>?movie</b> et <b>?movieName</b> contiennent respectivement l'IRI et le nom de chaque film."
189
+ }
190
+ },
191
+ {
192
+ "query": "PREFIX voc: <https://swapi.co/vocabulary/>\nPREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>\n\nSELECT * {\n <https://swapi.co/resource/human/1> voc:film ?movie .\n ?movie rdfs:label ?movieName ;\n voc:releaseDate ?movieReleaseDate .\n} ORDER BY ?movieReleaseDate\n",
193
+ "queryExtraContent": {
194
+ "en": "The query builds upon the previous query but adds an additional join to fetch each movie's release date, and also sorting the results by the release date.",
195
+ "fr": "⚒La requête s'appuie sur la requête précédente mais ajoute une jointure supplémentaire pour récupérer la date de sortie de chaque film, et également trier les résultats par date de sortie."
196
+ },
197
+ "resultExtraContent": {
198
+ "en": "The new variable <b>?movieReleaseDate</b> contains the release date and the results are sorted by it. We can clearly see that <b>A New Hope</b> was released first.",
199
+ "fr": "⚒La nouvelle variable <b>?movieReleaseDate</b> contient la date de sortie et les résultats sont triés en fonction de celle-ci. Nous pouvons clairement voir que <b>A New Hope</b> est sorti en premier."
200
+ }
201
+ }
202
+ ]
203
+ }
204
+ },
205
+ {
206
+ "guideBlockName": "guide-end"
207
+ }
208
+ ]
209
+ },
210
+ {
211
+ "guideName": {
212
+ "en": "2 The Star Wars guide User Interactive flow",
213
+ "fr": "⚒Le guide sur Star Wars"
214
+ },
215
+ "guideDescription": {
216
+ "en": "The Star Wars guide is a beginner's guide showing repository creation, importing RDF data from a file, starting to explore data from the visual graph, and executing SPARQL queries. It takes approximately 30 minutes to complete.",
217
+ "fr": "⚒Un guide de base montrant la création de répertoire, l'importation de RDF à partir d'un fichier, un graphique visuel et certaines requêtes SPARQL."
218
+ },
219
+ "guideLevel": 0,
220
+ "guideOrder": 1,
221
+ "options": {
222
+ "repositoryIdBase": "starwars-user-interactive"
223
+ },
224
+ "steps": [
225
+ {
226
+ "guideBlockName": "welcome"
227
+ },
228
+ {
229
+ "guideBlockName": "create-repository"
230
+ },
231
+ {
232
+ "guideBlockName": "select-repository-dropdown"
233
+ },
234
+ {
235
+ "guideBlockName": "enable-autocomplete"
236
+ },
237
+ {
238
+ "guideBlockName": "import-rdf-file",
239
+ "options": {
240
+ "resourcePath": "starwars",
241
+ "resourceFile": "starwars-user-interactive.ttl"
242
+ }
243
+ },
244
+ {
245
+ "guideBlockName": "visual-graph",
246
+ "options": {
247
+ "easyGraphInputText": "lu",
248
+ "iri": "https://swapi.co/resource/human/1",
249
+ "iriLabel": "Luke Skywalker"
250
+ }
251
+ },
252
+ {
253
+ "guideBlockName": "visual-graph-node-focus",
254
+ "options": {
255
+ "iri": "https://swapi.co/resource/human/1",
256
+ "iriLabel": "Luke Skywalker"
257
+ }
258
+ },
259
+ {
260
+ "guideBlockName": "visual-graph-link-focus",
261
+ "options": {
262
+ "fromIri": "https://swapi.co/resource/human/1",
263
+ "fromIriLabel": "Luke Skywalker",
264
+ "toIri": "https://swapi.co/vocabulary/Character",
265
+ "toIriLabel": "Character",
266
+ "iriLabel": "type",
267
+ "extraContent": {
268
+ "en": "This tells us that one of the RDF types for <b>{{fromIriLabel}}</b> is <b>{{toIriLabel}}</b>.",
269
+ "fr": "⚒Cela nous indique que l'un des types RDF pour <b>{{fromIriLabel}}</b> est <b>{{toIriLabel}}</b>."
270
+ }
271
+ }
272
+ },
273
+ {
274
+ "guideBlockName": "visual-graph-node-focus",
275
+ "options": {
276
+ "iri": "https://swapi.co/vocabulary/Mammal",
277
+ "iriLabel": "Mammal",
278
+ "content": "",
279
+ "extraContent": {
280
+ "en": "<b>{{iriLabel}}</b> is another RDF type for <b>Luke Skywalker</b>.",
281
+ "fr": "⚒<b>{{iriLabel}}</b> est un autre type RDF pour <b>Luke Skywalker</b>."
282
+ }
283
+ }
284
+ },
285
+ {
286
+ "guideBlockName": "visual-graph-link-focus",
287
+ "options": {
288
+ "fromIri": "https://swapi.co/resource/human/1",
289
+ "fromIriLabel": "Luke Skywalker",
290
+ "toIri": "https://swapi.co/resource/vehicle/14",
291
+ "toIriLabel": "Snowspeeder",
292
+ "iriLabel": "vehicle",
293
+ "content": "",
294
+ "extraContent": {
295
+ "en": "This connection tells us that <b>{{fromIriLabel}}</b> has a <b>{{iriLabel}}</b> called <b>{{toIriLabel}}</b>. In addition, it shows the reverse relation <b>pilot</b>, which links <b>{{toIriLabel}}</b> to <b>{{fromIriLabel}}</b>.",
296
+ "fr": "⚒Cette connexion nous indique que <b>{{fromIriLabel}}</b> a un <b>{{iriLabel}}</b> appelé <b>{{toIriLabel}}</b>. De plus, il montre la relation inverse <b>pilot</b>, qui relie <b>{{toIriLabel}}</b> à <b>{{fromIriLabel}}</b>."
297
+ }
298
+ }
299
+ },
300
+ {
301
+ "guideBlockName": "visual-graph-node-focus",
302
+ "options": {
303
+ "fromIriLabel": "Luke Skywalker",
304
+ "iri": "https://swapi.co/resource/vehicle/30",
305
+ "iriLabel": "Imperial Speeder Bike",
306
+ "content": "",
307
+ "extraContent": {
308
+ "en": "<b>{{fromIriLabel}}</b> has another <b>vehicle</b> called <b>{{iriLabel}}</b>. Again, the reverse relation <b>pilot</b> links <b>{{iriLabel}}</b> to <b>{{fromIriLabel}}</b>.",
309
+ "fr": "⚒<b>{{fromIriLabel}}</b> a un autre <b>vehicle</b> appelé <b>{{iriLabel}}</b>. Encore une fois, la relation inverse <b>pilot</b> relie <b>{{iriLabel}}</b> à <b>{{fromIriLabel}}</b>."
310
+ }
311
+ }
312
+ },
313
+ {
314
+ "guideBlockName": "visual-graph-properties",
315
+ "options": {
316
+ "iri": "https://swapi.co/resource/film/1",
317
+ "iriLabel": "A New Hope",
318
+ "focusProperties": [
319
+ {
320
+ "property": "types",
321
+ "message": {
322
+ "en": "We can see that <b>{{iriLabel}}</b> has a single type, <b>voc:Film</b>.",
323
+ "fr": "⚒Nous pouvons voir que <b>{{iriLabel}}</b> a un seul type, <b>voc:Film</b>."
324
+ }
325
+ },
326
+ {
327
+ "property": "voc:releaseDate",
328
+ "message": {
329
+ "en": "This shows the actual release date of <b>{{iriLabel}}</b>."
330
+ }
331
+ },
332
+ {
333
+ "property": "voc:episodeId",
334
+ "skipGenericMessage": true,
335
+ "message": {
336
+ "en": "The property <b>voc:episodeId</b> tells us that <b>{{iriLabel}}</b> was envisioned as the 4th movie in the series, even though it was the first to be released in 1977."
337
+ }
338
+ }
339
+ ]
340
+ }
341
+ },
342
+ {
343
+ "guideBlockName": "visual-graph-expand",
344
+ "options": {
345
+ "iri": "https://swapi.co/resource/film/1",
346
+ "iriLabel": "A New Hope"
347
+ }
348
+ },
349
+ {
350
+ "guideBlockName": "visual-graph-node-focus",
351
+ "options": {
352
+ "iri": "https://swapi.co/resource/droid/2",
353
+ "iriLabel": "C-3PO",
354
+ "content": "",
355
+ "extraContent": {
356
+ "en": "Node expansion enriches the graph by showing nodes connected to the expanded node, such as the character <b>{{iriLabel}}</b>.",
357
+ "fr": "⚒L'expansion des nœuds enrichit le graphique en montrant les nœuds connectés au nœud étendu, comme le caractère <b>{{iriLabel}}</b>."
358
+ }
359
+ }
360
+ },
361
+ {
362
+ "guideBlockName": "visual-graph-node-focus",
363
+ "options": {
364
+ "iri": "https://swapi.co/resource/planet/1",
365
+ "iriLabel": "Tatooine",
366
+ "content": "",
367
+ "extraContent": {
368
+ "en": "The planet <b>{{iriLabel}}</b>, which was already shown before expanding, is now linked to both <b>Luke Skywalker</b> and <b>A New Hope</b>.",
369
+ "fr": "⚒La planète <b>{{iriLabel}}</b>, qui était déjà montrée avant de s'agrandir, est maintenant liée à la fois à <b>Luke Skywalker</b> et à <b>A New Hope</b>."
370
+ }
371
+ }
372
+ },
373
+ {
374
+ "guideBlockName": "execute-sparql-query",
375
+ "options": {
376
+ "queries": [
377
+ {
378
+ "query": "SELECT * {\n <https://swapi.co/resource/human/1> ?p ?o\n}\n",
379
+ "queryExtraContent": {
380
+ "en": "The query selects RDF statements whose <i>subject</i> is <b>Luke Skywalker</b> (identified by the IRI <b>https://swapi.co/resource/human/1</b>).",
381
+ "fr": "⚒La requête sélectionne les déclarations RDF dont le <i>sujet</i> est <b>Luke Skywalker</b> (identifié par l'IRI <b>https://swapi.co/resource/human/1</b> )."
382
+ },
383
+ "resultExtraContent": {
384
+ "en": "The variables <b>?p</b> and <b>?o</b> correspond to the <i>predicate</i> and <i>object</i> of the RDF statements.",
385
+ "fr": "⚒Les variables <b>?p</b> et <b>?o</b> correspondent au <i>prédicat</i> et à l'<i>objet</i> des déclarations RDF."
386
+ }
387
+ },
388
+ {
389
+ "query": "PREFIX voc: <https://swapi.co/vocabulary/>\nPREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>\n\nSELECT * {\n <https://swapi.co/resource/human/1> voc:film ?movie .\n ?movie rdfs:label ?movieName .\n}\n",
390
+ "queryExtraContent": {
391
+ "en": "The query selects all movies where <b>Luke Skywalker</b> is one of the characters and illustrates the simplest SPARQL join, using the same variable <b>?movie</b> in two different statement patterns.",
392
+ "fr": "⚒La requête sélectionne tous les films où <b>Luke Skywalker</b> est l'un des personnages et illustre la jointure SPARQL la plus simple, en utilisant la même variable <b>?movie</b> dans deux modèles d'instructions différents."
393
+ },
394
+ "resultExtraContent": {
395
+ "en": "The variables <b>?movie</b> and <b>?movieName</b> contain each movie's IRI and name respectively.",
396
+ "fr": "⚒Les variables <b>?movie</b> et <b>?movieName</b> contiennent respectivement l'IRI et le nom de chaque film."
397
+ }
398
+ },
399
+ {
400
+ "query": "PREFIX voc: <https://swapi.co/vocabulary/>\nPREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>\n\nSELECT * {\n <https://swapi.co/resource/human/1> voc:film ?movie .\n ?movie rdfs:label ?movieName ;\n voc:releaseDate ?movieReleaseDate .\n} ORDER BY ?movieReleaseDate\n",
401
+ "queryExtraContent": {
402
+ "en": "The query builds upon the previous query but adds an additional join to fetch each movie's release date, and also sorting the results by the release date.",
403
+ "fr": "⚒La requête s'appuie sur la requête précédente mais ajoute une jointure supplémentaire pour récupérer la date de sortie de chaque film, et également trier les résultats par date de sortie."
404
+ },
405
+ "resultExtraContent": {
406
+ "en": "The new variable <b>?movieReleaseDate</b> contains the release date and the results are sorted by it. We can clearly see that <b>A New Hope</b> was released first.",
407
+ "fr": "⚒La nouvelle variable <b>?movieReleaseDate</b> contient la date de sortie et les résultats sont triés en fonction de celle-ci. Nous pouvons clairement voir que <b>A New Hope</b> est sorti en premier."
408
+ }
409
+ }
410
+ ]
411
+ }
412
+ },
413
+ {
414
+ "guideBlockName": "guide-end"
415
+ }
416
+ ]
417
+ },
418
+ {
419
+ "guideName": {
420
+ "en": "3 The Movies database guide"
421
+ },
422
+ "guideDescription": {
423
+ "en": "The Movies database guide is a beginner's guide showing repository creation, importing RDF data from a file, starting to explore data from the class hierarchy, some SPARQL queries and exlporing RDF with the tabular view. It takes approximately 30 minutes to complete."
424
+ },
425
+ "guideLevel": 0,
426
+ "guideOrder": 2,
427
+ "options": {
428
+ "repositoryIdBase": "movies"
429
+ },
430
+ "steps": [
431
+ {
432
+ "guideBlockName": "welcome"
433
+ },
434
+ {
435
+ "guideBlockName": "create-repository"
436
+ },
437
+ {
438
+ "guideBlockName": "select-repository-dropdown"
439
+ },
440
+ {
441
+ "guideBlockName": "enable-autocomplete"
442
+ },
443
+ {
444
+ "guideBlockName": "import-rdf-file",
445
+ "options": {
446
+ "resourcePath": "movies",
447
+ "resourceFile": "movies.ttl"
448
+ }
449
+ },
450
+ {
451
+ "guideBlockName": "class-hierarchy",
452
+ "options": {
453
+ "introExtraContent": {
454
+ "en": "In this dataset, there is a single top-level class, <b>schema:Movie</b>, and two subclasses (the smaller circles inside). This tells us that the dataset has to do with movies."
455
+ },
456
+ "zoomIris": [
457
+ {
458
+ "iri": "schema:Movie",
459
+ "postExtraContent": {
460
+ "en": "The two subclasses, <b>imdb:BlackandWhiteMovie</b> and <b>imdb:ColorMovie</b>, tell us that the movies are divided into black-and-white and color ones, and there are more color movies than black-and-white ones since the <b>imdb:ColorMovie</b> circle is larger."
461
+ }
462
+ }
463
+ ]
464
+ }
465
+ },
466
+ {
467
+ "guideBlockName": "class-hierarchy-instances",
468
+ "options": {
469
+ "iri": "imdb:ColorMovie",
470
+ "focusInstances": [
471
+ "imdb:title/Superman",
472
+ "imdb:title/Mulan"
473
+ ],
474
+ "followCountLink": true
475
+ }
476
+ },
477
+ {
478
+ "guideBlockName": "execute-sparql-query",
479
+ "options": {
480
+ "queries": [
481
+ {
482
+ "query": "PREFIX imdb: <http://academy.ontotext.com/imdb/>\nSELECT * {\n imdb:title\\/PiratesoftheCaribbeanAtWorldsEnd ?p ?o .\n}\n",
483
+ "queryExtraContent": {
484
+ "en": "The query selects RDF statements whose <i>subject</i> is the movie <b>Pirates of the Caribbean At World's End</b> (identified by the IRI <b>imdb:title/PiratesoftheCaribbeanAtWorldsEnd</b>). Note that we need to escape the / in the shortened IRI."
485
+ },
486
+ "resultExtraContent": {
487
+ "en": "The variables <b>?p</b> and <b>?o</b> correspond to the <i>predicate</i> and <i>object</i> of the RDF statements. We can see that the director (via the predicate <b>schema:director</b>) is identified by the IRI <b>imdb:person/GoreVerbinski</b> (scroll down if necessary)"
488
+ }
489
+ },
490
+ {
491
+ "query": "PREFIX imdb: <http://academy.ontotext.com/imdb/>\nPREFIX schema: <http://schema.org/>\n\nSELECT * { \n ?movie a imdb:ColorMovie ;\n schema:name ?movieName ;\n schema:commentCount ?commentCount .\n} ORDER BY DESC(?commentCount)\n",
492
+ "queryExtraContent": {
493
+ "en": "The query selects all color movies by class (<b>a</b> is a short-hand notation for <b>rdf:type</b>) and then performs two joins to fetch the movie's name (via the <b>schema:name</b> predicate), and the movie's number of comments (via the <b>schema:commentCount</b> predicate). Finally, the result must be ordered by the number of comments in descending order."
494
+ },
495
+ "resultExtraContent": {
496
+ "en": "The variables <b>?movie</b>, <b>?movieName</b> and <b>?commentCount</b> contain each movie's IRI, name and number of comments respectively. We can see that the movie with the most comments, <b>The Dark Knight Rises</b>, comes on top."
497
+ }
498
+ }
499
+ ]
500
+ }
501
+ },
502
+ {
503
+ "guideBlockName": "table-graph-explore",
504
+ "options": {
505
+ "iri": "http://academy.ontotext.com/imdb/title/DjangoUnchained",
506
+ "iriLabel": "imdb:title/DjangoUnchained",
507
+ "subSteps": [
508
+ {
509
+ "type": "link",
510
+ "iri": "http://academy.ontotext.com/imdb/person/QuentinTarantino",
511
+ "iriLabel": "imdb:person/QuentinTarantino"
512
+ },
513
+ {
514
+ "type": "table",
515
+ "content": {
516
+ "en": "The table now shows RDF statements where <b>Quentin Tarantino</b> is in the subject position only."
517
+ }
518
+ },
519
+ {
520
+ "type": "role",
521
+ "role": "all",
522
+ "extraContent": {
523
+ "en": "In this way, we'll be able to see more statements related to <b>Quentin Tarantino</b>."
524
+ }
525
+ },
526
+ {
527
+ "type": "table",
528
+ "extraContent": {
529
+ "en": "The table now shows RDF statements where <b>Quentin Tarantino</b> is any position, such as <i>subject</i> or <i>object</i>."
530
+ }
531
+ },
532
+ {
533
+ "type": "visual",
534
+ "iri": "http://academy.ontotext.com/imdb/person/QuentinTarantino",
535
+ "iriLabel": "imdb:person/QuentinTarantino",
536
+ "extraContentVisualIntro": {
537
+ "en": "Let's go back to the table now &mdash; don't worry, the {{'visual.graph.label'|translate}} view is covered in more detail in the <b>Star Wars guide</b>."
538
+ }
539
+ },
540
+ {
541
+ "type": "row",
542
+ "row": 11,
543
+ "extraContent": {
544
+ "en": "Most RDF statements describe <b>Quentin Tarantino</b> as the director but he was the lead actor in <b>Reservoir Dogs</b>."
545
+ }
546
+ },
547
+ {
548
+ "type": "row",
549
+ "row": 12,
550
+ "content": {
551
+ "en": "If we look carefully, we'll notice that he was not only the lead actor but also the director of <b>Reservoir Dogs</b>."
552
+ },
553
+ "extraContent": {
554
+ "en": "Let's try to find all movies where the lead actor and the director are the same person with SPARQL."
555
+ }
556
+ }
557
+ ]
558
+ }
559
+ },
560
+ {
561
+ "guideBlockName": "execute-sparql-query",
562
+ "options": {
563
+ "showIntro": false,
564
+ "queries": [
565
+ {
566
+ "query": "PREFIX schema: <http://schema.org/>\nPREFIX imdb: <http://academy.ontotext.com/imdb/>\n\nSELECT * { \n\t?movie schema:director ?person ;\n imdb:leadActor ?person .\n} ORDER BY ?person\n",
567
+ "queryExtraContent": {
568
+ "en": "The query selects RDF statements that have the same <i>subject</i> (<b>?movie</b>) and the same <i>object</i> (<b>?person</b>). For any given movie and person, there must be RDF statements that link the movie and the person with both the <b>schema:director</b> and the <b>imdb:leadActor</b> <i>predicate</i>."
569
+ },
570
+ "resultExtraContent": {
571
+ "en": "The results show the movies and persons where the same person is both a leading actor and a director. The results are ordered by the person since we specified <b>ORDER BY ?person</b>. We can easily see that <b>Clint Eastwood</b> has made a lot of movies like that (scroll down if needed)."
572
+ }
573
+ },
574
+ {
575
+ "query": "PREFIX schema: <http://schema.org/>\nPREFIX imdb: <http://academy.ontotext.com/imdb/>\n\nSELECT ?person (COUNT(?movie) as ?numMovies) { \n\t?movie schema:director ?person ;\n imdb:leadActor ?person .\n} GROUP BY ?person ORDER BY DESC(?numMovies)\n",
576
+ "queryExtraContent": {
577
+ "en": "Just like the previous query, we select movies and people that are both the leading actor and the director. In this query, we also use <b>GROUP BY ?person</b> to group the results by person and <b>COUNT(?movie)</b> to count how many movies per person satisfy the criteria. The count is returned in the <b>?numMovies</b> variable."
578
+ },
579
+ "resultExtraContent": {
580
+ "en": "Since we also used <b>ORDER BY DESC(?numMovies)</b> to order the results by movie count in descending order, we can easily see that both <b>Clint Eastwood</b> and <b>Woody Allen</b> made 10 movies where they were the leading actor and the director."
581
+ }
582
+ }
583
+ ]
584
+ }
585
+ },
586
+ {
587
+ "guideBlockName": "guide-end"
588
+ }
589
+ ]
590
+ },
591
+ {
592
+ "guideName": {
593
+ "en": "4 The Movies database guide"
594
+ },
595
+ "guideDescription": {
596
+ "en": "The Movies database guide is a beginner's guide showing repository creation, importing RDF data from a file, starting to explore data from the class hierarchy, some SPARQL queries and exlporing RDF with the tabular view. It takes approximately 30 minutes to complete."
597
+ },
598
+ "guideLevel": 0,
599
+ "guideOrder": 2,
600
+ "options": {
601
+ "repositoryIdBase": "movies-user-interactive"
602
+ },
603
+ "steps": [
604
+ {
605
+ "guideBlockName": "welcome"
606
+ },
607
+ {
608
+ "guideBlockName": "create-repository"
609
+ },
610
+ {
611
+ "guideBlockName": "select-repository-dropdown"
612
+ },
613
+ {
614
+ "guideBlockName": "enable-autocomplete"
615
+ },
616
+ {
617
+ "guideBlockName": "import-rdf-file",
618
+ "options": {
619
+ "resourcePath": "movies",
620
+ "resourceFile": "movies-user-interactive.ttl"
621
+ }
622
+ },
623
+ {
624
+ "guideBlockName": "class-hierarchy",
625
+ "options": {
626
+ "introExtraContent": {
627
+ "en": "In this dataset, there is a single top-level class, <b>schema:Movie</b>, and two subclasses (the smaller circles inside). This tells us that the dataset has to do with movies."
628
+ },
629
+ "zoomIris": [
630
+ {
631
+ "iri": "schema:Movie",
632
+ "postExtraContent": {
633
+ "en": "The two subclasses, <b>imdb:BlackandWhiteMovie</b> and <b>imdb:ColorMovie</b>, tell us that the movies are divided into black-and-white and color ones, and there are more color movies than black-and-white ones since the <b>imdb:ColorMovie</b> circle is larger."
634
+ }
635
+ }
636
+ ]
637
+ }
638
+ },
639
+ {
640
+ "guideBlockName": "class-hierarchy-instances",
641
+ "options": {
642
+ "iri": "imdb:ColorMovie",
643
+ "focusInstances": [
644
+ "imdb:title/Superman",
645
+ "imdb:title/Mulan"
646
+ ],
647
+ "followCountLink": true
648
+ }
649
+ },
650
+ {
651
+ "guideBlockName": "execute-sparql-query",
652
+ "options": {
653
+ "queries": [
654
+ {
655
+ "query": "PREFIX imdb: <http://academy.ontotext.com/imdb/>\nSELECT * {\n imdb:title\\/PiratesoftheCaribbeanAtWorldsEnd ?p ?o .\n}\n",
656
+ "queryExtraContent": {
657
+ "en": "The query selects RDF statements whose <i>subject</i> is the movie <b>Pirates of the Caribbean At World's End</b> (identified by the IRI <b>imdb:title/PiratesoftheCaribbeanAtWorldsEnd</b>). Note that we need to escape the / in the shortened IRI."
658
+ },
659
+ "resultExtraContent": {
660
+ "en": "The variables <b>?p</b> and <b>?o</b> correspond to the <i>predicate</i> and <i>object</i> of the RDF statements. We can see that the director (via the predicate <b>schema:director</b>) is identified by the IRI <b>imdb:person/GoreVerbinski</b> (scroll down if necessary)"
661
+ }
662
+ },
663
+ {
664
+ "query": "PREFIX imdb: <http://academy.ontotext.com/imdb/>\nPREFIX schema: <http://schema.org/>\n\nSELECT * { \n ?movie a imdb:ColorMovie ;\n schema:name ?movieName ;\n schema:commentCount ?commentCount .\n} ORDER BY DESC(?commentCount)\n",
665
+ "queryExtraContent": {
666
+ "en": "The query selects all color movies by class (<b>a</b> is a short-hand notation for <b>rdf:type</b>) and then performs two joins to fetch the movie's name (via the <b>schema:name</b> predicate), and the movie's number of comments (via the <b>schema:commentCount</b> predicate). Finally, the result must be ordered by the number of comments in descending order."
667
+ },
668
+ "resultExtraContent": {
669
+ "en": "The variables <b>?movie</b>, <b>?movieName</b> and <b>?commentCount</b> contain each movie's IRI, name and number of comments respectively. We can see that the movie with the most comments, <b>The Dark Knight Rises</b>, comes on top."
670
+ }
671
+ }
672
+ ]
673
+ }
674
+ },
675
+ {
676
+ "guideBlockName": "table-graph-explore",
677
+ "options": {
678
+ "iri": "http://academy.ontotext.com/imdb/title/DjangoUnchained",
679
+ "iriLabel": "imdb:title/DjangoUnchained",
680
+ "subSteps": [
681
+ {
682
+ "type": "link",
683
+ "iri": "http://academy.ontotext.com/imdb/person/QuentinTarantino",
684
+ "iriLabel": "imdb:person/QuentinTarantino"
685
+ },
686
+ {
687
+ "type": "table",
688
+ "content": {
689
+ "en": "The table now shows RDF statements where <b>Quentin Tarantino</b> is in the subject position only."
690
+ }
691
+ },
692
+ {
693
+ "type": "role",
694
+ "role": "all",
695
+ "extraContent": {
696
+ "en": "In this way, we'll be able to see more statements related to <b>Quentin Tarantino</b>."
697
+ }
698
+ },
699
+ {
700
+ "type": "table",
701
+ "extraContent": {
702
+ "en": "The table now shows RDF statements where <b>Quentin Tarantino</b> is any position, such as <i>subject</i> or <i>object</i>."
703
+ }
704
+ },
705
+ {
706
+ "type": "visual",
707
+ "iri": "http://academy.ontotext.com/imdb/person/QuentinTarantino",
708
+ "iriLabel": "imdb:person/QuentinTarantino",
709
+ "extraContentVisualIntro": {
710
+ "en": "Let's go back to the table now &mdash; don't worry, the {{'visual.graph.label'|translate}} view is covered in more detail in the <b>Star Wars guide</b>."
711
+ }
712
+ },
713
+ {
714
+ "type": "row",
715
+ "row": 11,
716
+ "extraContent": {
717
+ "en": "Most RDF statements describe <b>Quentin Tarantino</b> as the director but he was the lead actor in <b>Reservoir Dogs</b>."
718
+ }
719
+ },
720
+ {
721
+ "type": "row",
722
+ "row": 12,
723
+ "content": {
724
+ "en": "If we look carefully, we'll notice that he was not only the lead actor but also the director of <b>Reservoir Dogs</b>."
725
+ },
726
+ "extraContent": {
727
+ "en": "Let's try to find all movies where the lead actor and the director are the same person with SPARQL."
728
+ }
729
+ }
730
+ ]
731
+ }
732
+ },
733
+ {
734
+ "guideBlockName": "execute-sparql-query",
735
+ "options": {
736
+ "showIntro": false,
737
+ "queries": [
738
+ {
739
+ "query": "PREFIX schema: <http://schema.org/>\nPREFIX imdb: <http://academy.ontotext.com/imdb/>\n\nSELECT * { \n\t?movie schema:director ?person ;\n imdb:leadActor ?person .\n} ORDER BY ?person\n",
740
+ "queryExtraContent": {
741
+ "en": "The query selects RDF statements that have the same <i>subject</i> (<b>?movie</b>) and the same <i>object</i> (<b>?person</b>). For any given movie and person, there must be RDF statements that link the movie and the person with both the <b>schema:director</b> and the <b>imdb:leadActor</b> <i>predicate</i>."
742
+ },
743
+ "resultExtraContent": {
744
+ "en": "The results show the movies and persons where the same person is both a leading actor and a director. The results are ordered by the person since we specified <b>ORDER BY ?person</b>. We can easily see that <b>Clint Eastwood</b> has made a lot of movies like that (scroll down if needed)."
745
+ }
746
+ },
747
+ {
748
+ "query": "PREFIX schema: <http://schema.org/>\nPREFIX imdb: <http://academy.ontotext.com/imdb/>\n\nSELECT ?person (COUNT(?movie) as ?numMovies) { \n\t?movie schema:director ?person ;\n imdb:leadActor ?person .\n} GROUP BY ?person ORDER BY DESC(?numMovies)\n",
749
+ "queryExtraContent": {
750
+ "en": "Just like the previous query, we select movies and people that are both the leading actor and the director. In this query, we also use <b>GROUP BY ?person</b> to group the results by person and <b>COUNT(?movie)</b> to count how many movies per person satisfy the criteria. The count is returned in the <b>?numMovies</b> variable."
751
+ },
752
+ "resultExtraContent": {
753
+ "en": "Since we also used <b>ORDER BY DESC(?numMovies)</b> to order the results by movie count in descending order, we can easily see that both <b>Clint Eastwood</b> and <b>Woody Allen</b> made 10 movies where they were the leading actor and the director."
754
+ }
755
+ }
756
+ ]
757
+ }
758
+ },
759
+ {
760
+ "guideBlockName": "guide-end"
761
+ }
762
+ ]
763
+ }
764
+ ]