@nuggetslife/vc 0.1.0 → 0.2.0

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 (58) hide show
  1. package/interop-allowlist.json +3 -0
  2. package/interop-smoke-allowlist.json +3 -0
  3. package/package.json +8 -7
  4. package/src/jsonld.rs +2 -1
  5. package/src/ld_signatures.rs +11 -2
  6. package/test-fixtures/interop/README.md +46 -0
  7. package/test-fixtures/interop/_contexts/README.md +51 -0
  8. package/test-fixtures/interop/_contexts/bbs-bound-v1.jsonld +92 -0
  9. package/test-fixtures/interop/_contexts/citizenship-v1.jsonld +58 -0
  10. package/test-fixtures/interop/_contexts/credentials-v1.jsonld +316 -0
  11. package/test-fixtures/interop/_contexts/elm-edc-ap.jsonld +809 -0
  12. package/test-fixtures/interop/_contexts/essif-schemas-vc-2020-v1.jsonld +47 -0
  13. package/test-fixtures/interop/_contexts/identity-v2.jsonld +195 -0
  14. package/test-fixtures/interop/_contexts/nuggets-identity-v1.jsonld +175 -0
  15. package/test-fixtures/interop/_contexts/nuggets-kyb-v1.jsonld +333 -0
  16. package/test-fixtures/interop/_contexts/openbadges-v3.jsonld +445 -0
  17. package/test-fixtures/interop/_contexts/security-bbs-v1.jsonld +93 -0
  18. package/test-fixtures/interop/ebsi/diploma-elm/README.md +29 -0
  19. package/test-fixtures/interop/ebsi/diploma-elm/expected.nq +70 -0
  20. package/test-fixtures/interop/ebsi/diploma-elm/frame.jsonld +24 -0
  21. package/test-fixtures/interop/ebsi/diploma-elm/input.jsonld +444 -0
  22. package/test-fixtures/interop/ebsi/diploma-simple/README.md +19 -0
  23. package/test-fixtures/interop/ebsi/diploma-simple/expected.nq +9 -0
  24. package/test-fixtures/interop/ebsi/diploma-simple/frame.jsonld +13 -0
  25. package/test-fixtures/interop/ebsi/diploma-simple/input.jsonld +24 -0
  26. package/test-fixtures/interop/idv2/full-disclosure/README.md +9 -0
  27. package/test-fixtures/interop/idv2/full-disclosure/expected.nq +59 -0
  28. package/test-fixtures/interop/idv2/full-disclosure/frame.jsonld +9 -0
  29. package/test-fixtures/interop/idv2/full-disclosure/input.jsonld +82 -0
  30. package/test-fixtures/interop/nuggets/identity-v1/README.md +17 -0
  31. package/test-fixtures/interop/nuggets/identity-v1/expected.nq +21 -0
  32. package/test-fixtures/interop/nuggets/identity-v1/frame.jsonld +17 -0
  33. package/test-fixtures/interop/nuggets/identity-v1/input.jsonld +31 -0
  34. package/test-fixtures/interop/nuggets/kyb-v1/README.md +15 -0
  35. package/test-fixtures/interop/nuggets/kyb-v1/expected.nq +18 -0
  36. package/test-fixtures/interop/nuggets/kyb-v1/frame.jsonld +24 -0
  37. package/test-fixtures/interop/nuggets/kyb-v1/input.jsonld +60 -0
  38. package/test-fixtures/interop/openbadges-v3/basic-achievement/README.md +17 -0
  39. package/test-fixtures/interop/openbadges-v3/basic-achievement/expected.nq +12 -0
  40. package/test-fixtures/interop/openbadges-v3/basic-achievement/frame.jsonld +17 -0
  41. package/test-fixtures/interop/openbadges-v3/basic-achievement/input.jsonld +25 -0
  42. package/test-fixtures/interop/openbadges-v3/with-allowed-values/README.md +11 -0
  43. package/test-fixtures/interop/openbadges-v3/with-allowed-values/expected.nq +25 -0
  44. package/test-fixtures/interop/openbadges-v3/with-allowed-values/frame.jsonld +22 -0
  45. package/test-fixtures/interop/openbadges-v3/with-allowed-values/input.jsonld +40 -0
  46. package/test-fixtures/interop/vp/single-vc-wrap/README.md +6 -0
  47. package/test-fixtures/interop/vp/single-vc-wrap/expected.nq +7 -0
  48. package/test-fixtures/interop/vp/single-vc-wrap/frame.jsonld +17 -0
  49. package/test-fixtures/interop/vp/single-vc-wrap/input.jsonld +27 -0
  50. package/test-fixtures/interop/w3c-vc-v1/permanent-resident-card/README.md +5 -0
  51. package/test-fixtures/interop/w3c-vc-v1/permanent-resident-card/expected.nq +13 -0
  52. package/test-fixtures/interop/w3c-vc-v1/permanent-resident-card/frame.jsonld +14 -0
  53. package/test-fixtures/interop/w3c-vc-v1/permanent-resident-card/input.jsonld +29 -0
  54. package/test_interop.mjs +184 -0
  55. package/test_interop_smoke.mjs +388 -0
  56. package/tools/regen_expected.mjs +108 -0
  57. package/w3c-baseline.json +27 -30
  58. package/w3c-denylist.json +6 -1
@@ -0,0 +1,445 @@
1
+ {
2
+ "__url__": "https://purl.imsglobal.org/spec/ob/v3p0/context-3.0.3.json",
3
+ "@context": {
4
+ "@protected": true,
5
+ "id": "@id",
6
+ "type": "@type",
7
+ "OpenBadgeCredential": {
8
+ "@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#OpenBadgeCredential"
9
+ },
10
+ "Achievement": {
11
+ "@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#Achievement",
12
+ "@context": {
13
+ "@protected": true,
14
+ "id": "@id",
15
+ "type": "@type",
16
+ "achievementType": {
17
+ "@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#achievementType"
18
+ },
19
+ "alignment": {
20
+ "@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#alignment",
21
+ "@container": "@set"
22
+ },
23
+ "creator": {
24
+ "@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#creator"
25
+ },
26
+ "creditsAvailable": {
27
+ "@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#creditsAvailable",
28
+ "@type": "https://www.w3.org/2001/XMLSchema#float"
29
+ },
30
+ "criteria": {
31
+ "@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#Criteria",
32
+ "@type": "@id"
33
+ },
34
+ "fieldOfStudy": {
35
+ "@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#fieldOfStudy"
36
+ },
37
+ "humanCode": {
38
+ "@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#humanCode"
39
+ },
40
+ "image": {
41
+ "@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#image",
42
+ "@type": "@id"
43
+ },
44
+ "otherIdentifier": {
45
+ "@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#otherIdentifier",
46
+ "@container": "@set"
47
+ },
48
+ "related": {
49
+ "@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#related",
50
+ "@container": "@set"
51
+ },
52
+ "resultDescription": {
53
+ "@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#resultDescription",
54
+ "@container": "@set"
55
+ },
56
+ "specialization": {
57
+ "@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#specialization"
58
+ },
59
+ "tag": {
60
+ "@id": "https://schema.org/keywords",
61
+ "@container": "@set"
62
+ },
63
+ "version": {
64
+ "@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#version"
65
+ },
66
+ "inLanguage": {
67
+ "@id": "https://schema.org/inLanguage"
68
+ }
69
+ }
70
+ },
71
+ "AchievementCredential": {
72
+ "@id": "OpenBadgeCredential"
73
+ },
74
+ "AchievementSubject": {
75
+ "@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#AchievementSubject",
76
+ "@context": {
77
+ "@protected": true,
78
+ "id": "@id",
79
+ "type": "@type",
80
+ "achievement": {
81
+ "@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#achievement"
82
+ },
83
+ "activityEndDate": {
84
+ "@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#activityEndDate",
85
+ "@type": "https://www.w3.org/2001/XMLSchema#date"
86
+ },
87
+ "activityStartDate": {
88
+ "@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#activityStartDate",
89
+ "@type": "https://www.w3.org/2001/XMLSchema#date"
90
+ },
91
+ "creditsEarned": {
92
+ "@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#creditsEarned",
93
+ "@type": "https://www.w3.org/2001/XMLSchema#float"
94
+ },
95
+ "identifier": {
96
+ "@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#identifier",
97
+ "@container": "@set"
98
+ },
99
+ "image": {
100
+ "@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#image",
101
+ "@type": "@id"
102
+ },
103
+ "licenseNumber": {
104
+ "@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#licenseNumber"
105
+ },
106
+ "result": {
107
+ "@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#result",
108
+ "@container": "@set"
109
+ },
110
+ "role": {
111
+ "@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#role"
112
+ },
113
+ "source": {
114
+ "@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#source",
115
+ "@type": "@id"
116
+ },
117
+ "term": {
118
+ "@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#term"
119
+ }
120
+ }
121
+ },
122
+ "Address": {
123
+ "@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#Address",
124
+ "@context": {
125
+ "@protected": true,
126
+ "id": "@id",
127
+ "type": "@type",
128
+ "addressCountry": {
129
+ "@id": "https://schema.org/addressCountry"
130
+ },
131
+ "addressCountryCode": {
132
+ "@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#CountryCode"
133
+ },
134
+ "addressLocality": {
135
+ "@id": "https://schema.org/addressLocality"
136
+ },
137
+ "addressRegion": {
138
+ "@id": "https://schema.org/addressRegion"
139
+ },
140
+ "geo": {
141
+ "@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#GeoCoordinates"
142
+ },
143
+ "postOfficeBoxNumber": {
144
+ "@id": "https://schema.org/postOfficeBoxNumber"
145
+ },
146
+ "postalCode": {
147
+ "@id": "https://schema.org/postalCode"
148
+ },
149
+ "streetAddress": {
150
+ "@id": "https://schema.org/streetAddress"
151
+ }
152
+ }
153
+ },
154
+ "Alignment": {
155
+ "@id": "https://schema.org/AlignmentObject",
156
+ "@context": {
157
+ "@protected": true,
158
+ "id": "@id",
159
+ "type": "@type",
160
+ "targetCode": {
161
+ "@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#targetCode"
162
+ },
163
+ "targetDescription": {
164
+ "@id": "https://schema.org/targetDescription"
165
+ },
166
+ "targetFramework": {
167
+ "@id": "https://schema.org/targetFramework"
168
+ },
169
+ "targetName": {
170
+ "@id": "https://schema.org/targetName"
171
+ },
172
+ "targetType": {
173
+ "@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#targetType"
174
+ },
175
+ "targetUrl": {
176
+ "@id": "https://schema.org/targetUrl",
177
+ "@type": "https://www.w3.org/2001/XMLSchema#anyURI"
178
+ }
179
+ }
180
+ },
181
+ "Criteria": {
182
+ "@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#Criteria"
183
+ },
184
+ "EndorsementCredential": {
185
+ "@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#EndorsementCredential"
186
+ },
187
+ "EndorsementSubject": {
188
+ "@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#EndorsementSubject",
189
+ "@context": {
190
+ "@protected": true,
191
+ "id": "@id",
192
+ "type": "@type",
193
+ "endorsementComment": {
194
+ "@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#endorsementComment"
195
+ }
196
+ }
197
+ },
198
+ "Evidence": {
199
+ "@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#Evidence",
200
+ "@context": {
201
+ "@protected": true,
202
+ "id": "@id",
203
+ "type": "@type",
204
+ "audience": {
205
+ "@id": "https://schema.org/audience"
206
+ },
207
+ "genre": {
208
+ "@id": "https://schema.org/genre"
209
+ }
210
+ }
211
+ },
212
+ "GeoCoordinates": {
213
+ "@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#GeoCoordinates",
214
+ "@context": {
215
+ "@protected": true,
216
+ "id": "@id",
217
+ "type": "@type",
218
+ "latitude": {
219
+ "@id": "https://schema.org/latitude"
220
+ },
221
+ "longitude": {
222
+ "@id": "https://schema.org/longitude"
223
+ }
224
+ }
225
+ },
226
+ "IdentifierEntry": {
227
+ "@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#IdentifierEntry",
228
+ "@context": {
229
+ "@protected": true,
230
+ "id": "@id",
231
+ "type": "@type",
232
+ "identifier": {
233
+ "@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#identifier"
234
+ },
235
+ "identifierType": {
236
+ "@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#identifierType"
237
+ }
238
+ }
239
+ },
240
+ "IdentityObject": {
241
+ "@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#IdentityObject",
242
+ "@context": {
243
+ "@protected": true,
244
+ "id": "@id",
245
+ "type": "@type",
246
+ "hashed": {
247
+ "@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#hashed",
248
+ "@type": "https://www.w3.org/2001/XMLSchema#boolean"
249
+ },
250
+ "identityHash": {
251
+ "@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#identityHash"
252
+ },
253
+ "identityType": {
254
+ "@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#identityType"
255
+ },
256
+ "salt": {
257
+ "@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#salt"
258
+ }
259
+ }
260
+ },
261
+ "Image": {
262
+ "@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#Image",
263
+ "@context": {
264
+ "@protected": true,
265
+ "id": "@id",
266
+ "type": "@type",
267
+ "caption": {
268
+ "@id": "https://schema.org/caption"
269
+ }
270
+ }
271
+ },
272
+ "Profile": {
273
+ "@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#Profile",
274
+ "@context": {
275
+ "@protected": true,
276
+ "id": "@id",
277
+ "type": "@type",
278
+ "additionalName": {
279
+ "@id": "https://schema.org/additionalName"
280
+ },
281
+ "address": {
282
+ "@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#address",
283
+ "@type": "@id"
284
+ },
285
+ "dateOfBirth": {
286
+ "@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#dateOfBirth",
287
+ "@type": "https://www.w3.org/2001/XMLSchema#date"
288
+ },
289
+ "email": {
290
+ "@id": "https://schema.org/email"
291
+ },
292
+ "familyName": {
293
+ "@id": "https://schema.org/familyName"
294
+ },
295
+ "familyNamePrefix": {
296
+ "@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#familyNamePrefix"
297
+ },
298
+ "givenName": {
299
+ "@id": "https://schema.org/givenName"
300
+ },
301
+ "honorificPrefix": {
302
+ "@id": "https://schema.org/honorificPrefix"
303
+ },
304
+ "honorificSuffix": {
305
+ "@id": "https://schema.org/honorificSuffix"
306
+ },
307
+ "image": {
308
+ "@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#image",
309
+ "@type": "@id"
310
+ },
311
+ "otherIdentifier": {
312
+ "@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#otherIdentifier",
313
+ "@container": "@set"
314
+ },
315
+ "parentOrg": {
316
+ "@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#parentOrg",
317
+ "@type": "@id"
318
+ },
319
+ "patronymicName": {
320
+ "@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#patronymicName"
321
+ },
322
+ "phone": {
323
+ "@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#phone"
324
+ },
325
+ "official": {
326
+ "@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#official"
327
+ }
328
+ }
329
+ },
330
+ "Related": {
331
+ "@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#Related",
332
+ "@context": {
333
+ "@protected": true,
334
+ "id": "@id",
335
+ "type": "@type",
336
+ "version": {
337
+ "@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#version"
338
+ },
339
+ "inLanguage": {
340
+ "@id": "https://schema.org/inLanguage"
341
+ }
342
+ }
343
+ },
344
+ "Result": {
345
+ "@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#Result",
346
+ "@context": {
347
+ "@protected": true,
348
+ "id": "@id",
349
+ "type": "@type",
350
+ "achievedLevel": {
351
+ "@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#achievedLevel",
352
+ "@type": "https://www.w3.org/2001/XMLSchema#anyURI"
353
+ },
354
+ "resultDescription": {
355
+ "@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#resultDescription",
356
+ "@type": "https://www.w3.org/2001/XMLSchema#anyURI"
357
+ },
358
+ "status": {
359
+ "@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#status"
360
+ },
361
+ "value": {
362
+ "@id": "https://schema.org/value"
363
+ }
364
+ }
365
+ },
366
+ "ResultDescription": {
367
+ "@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#ResultDescription",
368
+ "@context": {
369
+ "@protected": true,
370
+ "id": "@id",
371
+ "type": "@type",
372
+ "allowedValue": {
373
+ "@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#allowedValue",
374
+ "@container": "@list"
375
+ },
376
+ "requiredLevel": {
377
+ "@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#requiredLevel",
378
+ "@type": "https://www.w3.org/2001/XMLSchema#anyURI"
379
+ },
380
+ "requiredValue": {
381
+ "@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#requiredValue"
382
+ },
383
+ "resultType": {
384
+ "@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#resultType"
385
+ },
386
+ "rubricCriterionLevel": {
387
+ "@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#rubricCriterionLevel",
388
+ "@container": "@set"
389
+ },
390
+ "valueMax": {
391
+ "@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#valueMax"
392
+ },
393
+ "valueMin": {
394
+ "@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#valueMin"
395
+ }
396
+ }
397
+ },
398
+ "RubricCriterionLevel": {
399
+ "@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#RubricCriterionLevel",
400
+ "@context": {
401
+ "@protected": true,
402
+ "id": "@id",
403
+ "type": "@type",
404
+ "level": {
405
+ "@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#level"
406
+ },
407
+ "points": {
408
+ "@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#points"
409
+ }
410
+ }
411
+ },
412
+ "alignment": {
413
+ "@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#alignment",
414
+ "@container": "@set"
415
+ },
416
+ "description": {
417
+ "@id": "https://schema.org/description"
418
+ },
419
+ "endorsement": {
420
+ "@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#endorsement",
421
+ "@container": "@set"
422
+ },
423
+ "image": {
424
+ "@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#image",
425
+ "@type": "@id"
426
+ },
427
+ "inLanguage": {
428
+ "@id": "https://schema.org/inLanguage"
429
+ },
430
+ "name": {
431
+ "@id": "https://schema.org/name"
432
+ },
433
+ "narrative": {
434
+ "@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#narrative"
435
+ },
436
+ "url": {
437
+ "@id": "https://schema.org/url",
438
+ "@type": "https://www.w3.org/2001/XMLSchema#anyURI"
439
+ },
440
+ "awardedDate": {
441
+ "@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#awardedDate",
442
+ "@type": "xsd:dateTime"
443
+ }
444
+ }
445
+ }
@@ -0,0 +1,93 @@
1
+ {
2
+ "__url__": "https://w3id.org/security/bbs/v1",
3
+ "@context": {
4
+ "@version": 1.1,
5
+ "id": "@id",
6
+ "type": "@type",
7
+ "BbsBlsSignature2020": {
8
+ "@id": "https://w3id.org/security#BbsBlsSignature2020",
9
+ "@context": {
10
+ "@version": 1.1,
11
+ "@protected": true,
12
+ "id": "@id",
13
+ "type": "@type",
14
+ "challenge": "https://w3id.org/security#challenge",
15
+ "created": {
16
+ "@id": "http://purl.org/dc/terms/created",
17
+ "@type": "http://www.w3.org/2001/XMLSchema#dateTime"
18
+ },
19
+ "domain": "https://w3id.org/security#domain",
20
+ "proofValue": "https://w3id.org/security#proofValue",
21
+ "nonce": "https://w3id.org/security#nonce",
22
+ "proofPurpose": {
23
+ "@id": "https://w3id.org/security#proofPurpose",
24
+ "@type": "@vocab",
25
+ "@context": {
26
+ "@version": 1.1,
27
+ "@protected": true,
28
+ "id": "@id",
29
+ "type": "@type",
30
+ "assertionMethod": {
31
+ "@id": "https://w3id.org/security#assertionMethod",
32
+ "@type": "@id",
33
+ "@container": "@set"
34
+ },
35
+ "authentication": {
36
+ "@id": "https://w3id.org/security#authenticationMethod",
37
+ "@type": "@id",
38
+ "@container": "@set"
39
+ }
40
+ }
41
+ },
42
+ "verificationMethod": {
43
+ "@id": "https://w3id.org/security#verificationMethod",
44
+ "@type": "@id"
45
+ }
46
+ }
47
+ },
48
+ "BbsBlsSignatureProof2020": {
49
+ "@id": "https://w3id.org/security#BbsBlsSignatureProof2020",
50
+ "@context": {
51
+ "@version": 1.1,
52
+ "@protected": true,
53
+ "id": "@id",
54
+ "type": "@type",
55
+
56
+ "challenge": "https://w3id.org/security#challenge",
57
+ "created": {
58
+ "@id": "http://purl.org/dc/terms/created",
59
+ "@type": "http://www.w3.org/2001/XMLSchema#dateTime"
60
+ },
61
+ "domain": "https://w3id.org/security#domain",
62
+ "nonce": "https://w3id.org/security#nonce",
63
+ "proofPurpose": {
64
+ "@id": "https://w3id.org/security#proofPurpose",
65
+ "@type": "@vocab",
66
+ "@context": {
67
+ "@version": 1.1,
68
+ "@protected": true,
69
+ "id": "@id",
70
+ "type": "@type",
71
+ "sec": "https://w3id.org/security#",
72
+ "assertionMethod": {
73
+ "@id": "https://w3id.org/security#assertionMethod",
74
+ "@type": "@id",
75
+ "@container": "@set"
76
+ },
77
+ "authentication": {
78
+ "@id": "https://w3id.org/security#authenticationMethod",
79
+ "@type": "@id",
80
+ "@container": "@set"
81
+ }
82
+ }
83
+ },
84
+ "proofValue": "https://w3id.org/security#proofValue",
85
+ "verificationMethod": {
86
+ "@id": "https://w3id.org/security#verificationMethod",
87
+ "@type": "@id"
88
+ }
89
+ }
90
+ },
91
+ "Bls12381G2Key2020": "https://w3id.org/security#Bls12381G2Key2020"
92
+ }
93
+ }
@@ -0,0 +1,29 @@
1
+ # EBSI — diploma-elm (European Digital Credential / ELMv3)
2
+
3
+ European Learning Model v3 sample credential — `Sample-CertOfPart-unsigned.jsonld` from the European Commission's official ELM repo. The upstream sample embeds ~100KB of base64 image/logo blobs inside `MediaObject` nodes; those `MediaObject` subtrees are pruned here for fixture size while preserving the rest of the structural shape verbatim. The `proof` field is also stripped (the harness frames the unsigned input).
4
+
5
+ - Upstream: `https://github.com/european-commission-empl/European-Learning-Model/blob/master/Credentials/JSON-LD%20Examples%20(ELM%20v3)/Sample-CertOfPart-unsigned.jsonld`
6
+ - Upstream context: `http://data.europa.eu/snb/model/context/edc-ap` (sourced from the same repo's `rdf/ap/edc/edc-ap-context.jsonld`)
7
+ - Retrieval date: 2026-05-06
8
+
9
+ ## What this fixture exercises
10
+
11
+ - A real `EuropeanDigitalCredential` shape: a `Person` credential subject with deeply nested objects (`hasClaim` → `LearningActivity` → `specifiedBy` → `LearningActivitySpecification`), each carrying `@language`-keyed display strings.
12
+ - An **array-of-objects without `@list` semantics** — `specifiedBy.supplementaryDocument` is a plain JSON array of `WebResource` objects. ELMv3's EDC-AP context does not declare any `@container: @list` terms, so this is the multiset (RDF unordered set) case, which is structurally distinct from OB v3's primitive `@list` (`allowedValue`) covered by `openbadges-v3/with-allowed-values`.
13
+ - Reveal frame discloses subject `familyName`/`givenName` plus `hasClaim.title`, `hasClaim.specifiedBy.title`, and the full `hasClaim.specifiedBy.supplementaryDocument` array.
14
+
15
+ ## Pre-existing constraint
16
+
17
+ EBSI's published diploma corpora (both the EBSI4Austria pilot and the ELMv3 reference samples) do not exercise `@list`-with-nested-objects — ELM uses bag/multiset semantics throughout. The gap that motivated this fixture in the Phase B plan (nested `@list`) is therefore not surfaced by any real-world EBSI sample currently published; the array-of-objects case below is the closest distinct shape the corpus offers beyond OB v3's primitive `@list`.
18
+
19
+ ## Expected status
20
+
21
+ **Pass.** The harness's offline loader + V2 native frame/canonize handle the EDC-AP context and the deeply-nested `hasClaim` structure cleanly.
22
+
23
+ ## V2-pinned `expected.nq` — do NOT regenerate via `regen_expected.mjs`
24
+
25
+ This fixture's `expected.nq` was hand-pinned to V2 native's output during Sprint 4 Phase B-2, closing GitHub issue #61. **Do not** run `node tools/regen_expected.mjs test-fixtures/interop/ebsi/diploma-elm` on this fixture — jsonld.js has a known framing bug here that drops the entire `credentialSubject` subgraph (literally emits `"credentialSubject": null`) when an `@explicit: true` sub-frame is applied to an `@type: @id` property. Regenerating would re-introduce 22 dropped triples and break parity.
26
+
27
+ W3C JSON-LD Framing 1.1 §4 / §4.2 specifies that `@explicit` controls *inclusion criteria* (which properties are retained), not subject retention. V2 native's output is spec-correct; jsonld.js's is not.
28
+
29
+ If the V2 native walker behavior changes intentionally (e.g. a future Phase C fix), update this `expected.nq` by hand by running V2 native's `JsonLd.frame` + `JsonLd.canonize` directly — not via the regen tool.
@@ -0,0 +1,70 @@
1
+ <http://data.europa.eu/snb/credential/25831c2> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/2004/02/skos/core#ConceptScheme> .
2
+ <http://data.europa.eu/snb/credential/e34929035b> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/2004/02/skos/core#Concept> .
3
+ <http://data.europa.eu/snb/credential/e34929035b> <http://www.w3.org/2004/02/skos/core#inScheme> <http://data.europa.eu/snb/credential/25831c2> .
4
+ <http://data.europa.eu/snb/credential/e34929035b> <http://www.w3.org/2004/02/skos/core#prefLabel> "Generic"@en .
5
+ <http://data.europa.eu/snb/model/ap/edc-generic-full> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://data.europa.eu/snb/model/elm/ShaclValidator2017> .
6
+ <http://publications.europa.eu/resource/authority/country/BEL> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/2004/02/skos/core#Concept> .
7
+ <http://publications.europa.eu/resource/authority/country/BEL> <http://www.w3.org/2004/02/skos/core#inScheme> <http://publications.europa.eu/resource/authority/country> .
8
+ <http://publications.europa.eu/resource/authority/country/BEL> <http://www.w3.org/2004/02/skos/core#notation> "country" .
9
+ <http://publications.europa.eu/resource/authority/country/BEL> <http://www.w3.org/2004/02/skos/core#prefLabel> "Belgium"@en .
10
+ <http://publications.europa.eu/resource/authority/country> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/2004/02/skos/core#ConceptScheme> .
11
+ <http://publications.europa.eu/resource/authority/language/ENG> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/2004/02/skos/core#Concept> .
12
+ <http://publications.europa.eu/resource/authority/language/ENG> <http://www.w3.org/2004/02/skos/core#inScheme> <http://publications.europa.eu/resource/authority/language> .
13
+ <http://publications.europa.eu/resource/authority/language/ENG> <http://www.w3.org/2004/02/skos/core#notation> "language" .
14
+ <http://publications.europa.eu/resource/authority/language/ENG> <http://www.w3.org/2004/02/skos/core#prefLabel> "English"@en .
15
+ <http://publications.europa.eu/resource/authority/language> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/2004/02/skos/core#ConceptScheme> .
16
+ <urn:credential:43662fb0-c31c-4afb-b501-e85aea91c0a8> <http://data.europa.eu/snb/model/elm/credentialProfiles> <http://data.europa.eu/snb/credential/e34929035b> .
17
+ <urn:credential:43662fb0-c31c-4afb-b501-e85aea91c0a8> <http://data.europa.eu/snb/model/elm/displayParameter> <urn:epass:displayParameter:1> .
18
+ <urn:credential:43662fb0-c31c-4afb-b501-e85aea91c0a8> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://data.europa.eu/snb/model/elm/EuropeanDigitalCredential> .
19
+ <urn:credential:43662fb0-c31c-4afb-b501-e85aea91c0a8> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <https://www.w3.org/2018/credentials#VerifiableCredential> .
20
+ <urn:credential:43662fb0-c31c-4afb-b501-e85aea91c0a8> <https://www.w3.org/2018/credentials#credentialSchema> <http://data.europa.eu/snb/model/ap/edc-generic-full> .
21
+ <urn:credential:43662fb0-c31c-4afb-b501-e85aea91c0a8> <https://www.w3.org/2018/credentials#credentialSubject> <urn:epass:person:1> .
22
+ <urn:credential:43662fb0-c31c-4afb-b501-e85aea91c0a8> <https://www.w3.org/2018/credentials#issuer> <urn:epass:org:1> .
23
+ <urn:credential:43662fb0-c31c-4afb-b501-e85aea91c0a8> <https://www.w3.org/2018/credentials#validFrom> "2023-06-28T14:30:00Z"^^<http://www.w3.org/2001/XMLSchema#dateTime> .
24
+ <urn:epass:activity:1> <http://data.europa.eu/snb/model/elm/specifiedBy> <urn:epass:learningActivitySpec:1> .
25
+ <urn:epass:activity:1> <http://purl.org/dc/terms/title> "EDC Updates Webinar"@en .
26
+ <urn:epass:activity:1> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://data.europa.eu/snb/model/elm/LearningActivity> .
27
+ <urn:epass:address:1> <http://data.europa.eu/snb/model/elm/countryCode> <http://publications.europa.eu/resource/authority/country/BEL> .
28
+ <urn:epass:address:1> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://data.europa.eu/snb/model/elm/Address> .
29
+ <urn:epass:displayDetail:1> <http://data.europa.eu/snb/model/elm/page> "1"^^<http://www.w3.org/2001/XMLSchema#positiveInteger> .
30
+ <urn:epass:displayDetail:1> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://data.europa.eu/snb/model/elm/DisplayDetail> .
31
+ <urn:epass:displayParameter:1> <http://data.europa.eu/snb/model/elm/individualDisplay> <urn:epass:individualDisplay:1> .
32
+ <urn:epass:displayParameter:1> <http://data.europa.eu/snb/model/elm/primaryLanguage> <http://publications.europa.eu/resource/authority/language/ENG> .
33
+ <urn:epass:displayParameter:1> <http://purl.org/dc/terms/description> "has attended the EDC Updates webinar"@en .
34
+ <urn:epass:displayParameter:1> <http://purl.org/dc/terms/language> <http://publications.europa.eu/resource/authority/language/ENG> .
35
+ <urn:epass:displayParameter:1> <http://purl.org/dc/terms/title> "Certificate of Participation"@en .
36
+ <urn:epass:displayParameter:1> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://data.europa.eu/snb/model/elm/DisplayParameter> .
37
+ <urn:epass:individualDisplay:1> <http://data.europa.eu/snb/model/elm/displayDetail> <urn:epass:displayDetail:1> .
38
+ <urn:epass:individualDisplay:1> <http://purl.org/dc/terms/language> <http://publications.europa.eu/resource/authority/language/ENG> .
39
+ <urn:epass:individualDisplay:1> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://data.europa.eu/snb/model/elm/IndividualDisplay> .
40
+ <urn:epass:learningActivitySpec:1> <http://data.europa.eu/snb/model/elm/supplementaryDocument> <urn:epass:webResource:2> .
41
+ <urn:epass:learningActivitySpec:1> <http://data.europa.eu/snb/model/elm/supplementaryDocument> <urn:epass:webResource:3> .
42
+ <urn:epass:learningActivitySpec:1> <http://data.europa.eu/snb/model/elm/supplementaryDocument> <urn:epass:webResource:4> .
43
+ <urn:epass:learningActivitySpec:1> <http://purl.org/dc/terms/title> "EDC Updates Webinar"@en .
44
+ <urn:epass:learningActivitySpec:1> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://data.europa.eu/snb/model/elm/LearningActivitySpecification> .
45
+ <urn:epass:legalIdentifier:1> <http://purl.org/dc/terms/spatial> <http://publications.europa.eu/resource/authority/country/BEL> .
46
+ <urn:epass:legalIdentifier:1> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://data.europa.eu/snb/model/elm/LegalIdentifier> .
47
+ <urn:epass:legalIdentifier:1> <http://www.w3.org/2004/02/skos/core#notation> "0000" .
48
+ <urn:epass:location:1> <http://data.europa.eu/snb/model/elm/address> <urn:epass:address:1> .
49
+ <urn:epass:location:1> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://purl.org/dc/terms/Location> .
50
+ <urn:epass:org:1> <http://data.europa.eu/snb/model/elm/location> <urn:epass:location:1> .
51
+ <urn:epass:org:1> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://data.europa.eu/snb/model/elm/Organisation> .
52
+ <urn:epass:org:1> <http://www.w3.org/2004/02/skos/core#altLabel> "EDC Support Team"@en .
53
+ <urn:epass:org:1> <http://www.w3.org/ns/regorg#legalName> "European Digital Credentials for Learning Support Team"@en .
54
+ <urn:epass:org:1> <http://www.w3.org/ns/regorg#registration> <urn:epass:legalIdentifier:1> .
55
+ <urn:epass:org:1> <http://xmlns.com/foaf/0.1/homepage> <urn:epass:webResource:1> .
56
+ <urn:epass:person:1> <http://data.europa.eu/snb/model/elm/hasClaim> <urn:epass:activity:1> .
57
+ <urn:epass:person:1> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://data.europa.eu/snb/model/elm/Person> .
58
+ <urn:epass:person:1> <http://xmlns.com/foaf/0.1/familyName> "Andromeda"@en .
59
+ <urn:epass:person:1> <http://xmlns.com/foaf/0.1/givenName> "Ana"@en .
60
+ <urn:epass:webResource:1> <http://data.europa.eu/snb/model/elm/contentUrl> "https://europa.eu/europass/en/europass-tools/digital-credentials"^^<http://www.w3.org/2001/XMLSchema#anyURI> .
61
+ <urn:epass:webResource:1> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://data.europa.eu/snb/model/elm/WebResource> .
62
+ <urn:epass:webResource:2> <http://data.europa.eu/snb/model/elm/contentUrl> "https://op.europa.eu/en/web/eu-vocabularies/europass"^^<http://www.w3.org/2001/XMLSchema#anyURI> .
63
+ <urn:epass:webResource:2> <http://purl.org/dc/terms/title> "Common European Skills Data Space"@en .
64
+ <urn:epass:webResource:2> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://data.europa.eu/snb/model/elm/WebResource> .
65
+ <urn:epass:webResource:3> <http://data.europa.eu/snb/model/elm/contentUrl> "https://europa.eu/europass/en/news/updates-european-digital-credential-infrastructure"^^<http://www.w3.org/2001/XMLSchema#anyURI> .
66
+ <urn:epass:webResource:3> <http://purl.org/dc/terms/title> "Updates to the European Digital Credential Infrastructure"@en .
67
+ <urn:epass:webResource:3> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://data.europa.eu/snb/model/elm/WebResource> .
68
+ <urn:epass:webResource:4> <http://data.europa.eu/snb/model/elm/contentUrl> "https://github.com/european-commission-empl/European-Learning-Model"^^<http://www.w3.org/2001/XMLSchema#anyURI> .
69
+ <urn:epass:webResource:4> <http://purl.org/dc/terms/title> "ELM on Github"@en .
70
+ <urn:epass:webResource:4> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://data.europa.eu/snb/model/elm/WebResource> .