@@ -432,48 +432,55 @@ api.compactIri = ({
432
432
containers . push ( '@list' ) ;
433
433
}
434
434
const list = value [ '@list' ] ;
435
- let commonLanguage = ( list . length === 0 ) ? defaultLanguage : null ;
436
- let commonType = null ;
437
- for ( let i = 0 ; i < list . length ; ++ i ) {
438
- const item = list [ i ] ;
439
- let itemLanguage = '@none' ;
440
- let itemType = '@none' ;
441
- if ( _isValue ( item ) ) {
442
- if ( '@language' in item ) {
443
- itemLanguage = item [ '@language' ] ;
444
- } else if ( '@type' in item ) {
445
- itemType = item [ '@type' ] ;
435
+ if ( list . length === 0 ) {
436
+ // any empty list can be matched against any term that uses the
437
+ // @list container regardless of @type or @language
438
+ typeOrLanguage = '@any' ;
439
+ typeOrLanguageValue = '@none' ;
440
+ } else {
441
+ let commonLanguage = ( list . length === 0 ) ? defaultLanguage : null ;
442
+ let commonType = null ;
443
+ for ( let i = 0 ; i < list . length ; ++ i ) {
444
+ const item = list [ i ] ;
445
+ let itemLanguage = '@none' ;
446
+ let itemType = '@none' ;
447
+ if ( _isValue ( item ) ) {
448
+ if ( '@language' in item ) {
449
+ itemLanguage = item [ '@language' ] ;
450
+ } else if ( '@type' in item ) {
451
+ itemType = item [ '@type' ] ;
452
+ } else {
453
+ // plain literal
454
+ itemLanguage = '@null' ;
455
+ }
446
456
} else {
447
- // plain literal
448
- itemLanguage = '@null' ;
457
+ itemType = '@id' ;
458
+ }
459
+ if ( commonLanguage === null ) {
460
+ commonLanguage = itemLanguage ;
461
+ } else if ( itemLanguage !== commonLanguage && _isValue ( item ) ) {
462
+ commonLanguage = '@none' ;
463
+ }
464
+ if ( commonType === null ) {
465
+ commonType = itemType ;
466
+ } else if ( itemType !== commonType ) {
467
+ commonType = '@none' ;
468
+ }
469
+ // there are different languages and types in the list, so choose
470
+ // the most generic term, no need to keep iterating the list
471
+ if ( commonLanguage === '@none' && commonType === '@none' ) {
472
+ break ;
449
473
}
450
- } else {
451
- itemType = '@id' ;
452
- }
453
- if ( commonLanguage === null ) {
454
- commonLanguage = itemLanguage ;
455
- } else if ( itemLanguage !== commonLanguage && _isValue ( item ) ) {
456
- commonLanguage = '@none' ;
457
- }
458
- if ( commonType === null ) {
459
- commonType = itemType ;
460
- } else if ( itemType !== commonType ) {
461
- commonType = '@none' ;
462
474
}
463
- // there are different languages and types in the list, so choose
464
- // the most generic term, no need to keep iterating the list
465
- if ( commonLanguage === '@none' && commonType === '@none' ) {
466
- break ;
475
+ commonLanguage = commonLanguage || '@none' ;
476
+ commonType = commonType || '@none' ;
477
+ if ( commonType !== '@none' ) {
478
+ typeOrLanguage = '@type' ;
479
+ typeOrLanguageValue = commonType ;
480
+ } else {
481
+ typeOrLanguageValue = commonLanguage ;
467
482
}
468
483
}
469
- commonLanguage = commonLanguage || '@none' ;
470
- commonType = commonType || '@none' ;
471
- if ( commonType !== '@none' ) {
472
- typeOrLanguage = '@type' ;
473
- typeOrLanguageValue = commonType ;
474
- } else {
475
- typeOrLanguageValue = commonLanguage ;
476
- }
477
484
} else {
478
485
if ( _isValue ( value ) ) {
479
486
if ( '@language' in value && ! ( '@index' in value ) ) {
0 commit comments