Abstract

This document reports on implementations of the JSON-LD 1.0 specifications. The main purpose of this document is to show that each feature of the specifications has been implemented by demonstrating interoperable implementations of each feature. To evaluate the coverage of an implementation's features, the JSON-LD Test Suite is used as a point of reference.

Status of This Document

This document is merely a W3C-internal document. It has no official standing of any kind and does not represent consensus of the W3C Membership.

Table of Contents

1. Introduction

The goal of this report is to verify whether the JSON-LD 1.0 [JSON-LD] and JSON-LD 1.0 Processing Algorithms and API [JSON-LD-API] specifications are implementable.

To evaluate the coverage of an implementation's features, the JSON-LD 1.0 Test Suite [JSON-LD-TESTS] is used as a point of reference.

See JSON-LD Test Description for more information.

2. Test Manifests

2.1 Compaction

JSON-LD compaction tests use object comparison.

Test JSONLD-Java JSON::LD jsonld.js browser jsonld.js node.js php-json-ld PyLD JsonLD
Test 0001: drop free-floating nodes PASS PASS PASS PASS PASS PASS PASS
Test 0002: basic PASS PASS PASS PASS PASS PASS PASS
Test 0003: drop null and unmapped properties PASS PASS PASS PASS PASS PASS PASS
Test 0004: optimize @set, keep empty arrays PASS PASS PASS PASS PASS PASS PASS
Test 0005: @type and prefix compaction PASS PASS PASS PASS PASS PASS PASS
Test 0006: keep expanded object format if @type doesn't match PASS PASS PASS PASS PASS PASS PASS
Test 0007: add context PASS PASS PASS PASS PASS PASS PASS
Test 0008: alias keywords PASS PASS PASS PASS PASS PASS PASS
Test 0009: compact @id PASS PASS PASS PASS PASS PASS PASS
Test 0010: array to @graph PASS PASS PASS PASS PASS PASS PASS
Test 0011: compact date PASS PASS PASS PASS PASS PASS PASS
Test 0012: native types PASS PASS PASS PASS PASS PASS PASS
Test 0013: @value with @language PASS PASS PASS PASS PASS PASS PASS
Test 0014: array to aliased @graph PASS PASS PASS PASS PASS PASS PASS
Test 0015: best match compaction PASS PASS PASS PASS PASS PASS PASS
Test 0016: recursive named graphs PASS PASS PASS PASS PASS PASS PASS
Test 0017: A term mapping to null removes the mapping PASS PASS PASS PASS PASS PASS PASS
Test 0018: best matching term for lists PASS PASS PASS PASS PASS PASS PASS
Test 0019: Keep duplicate values in @list and @set PASS PASS PASS PASS PASS PASS PASS
Test 0020: Compact @id that is a property IRI when @container is @list PASS PASS PASS PASS PASS PASS PASS
Test 0021: Compact properties and types using @vocab PASS PASS PASS PASS PASS PASS PASS
Test 0022: @list compaction of nested properties PASS PASS PASS PASS PASS PASS PASS
Test 0023: prefer @vocab over compacted IRIs PASS PASS PASS PASS PASS PASS PASS
Test 0024: most specific term matching in @list. PASS PASS PASS PASS PASS PASS PASS
Test 0025: Language maps PASS PASS PASS PASS PASS PASS PASS
Test 0026: Language map term selection with complications PASS PASS PASS PASS PASS PASS PASS
Test 0027: @container: @set with multiple values PASS PASS PASS PASS PASS PASS PASS
Test 0028: Alias keywords and use @vocab PASS PASS PASS PASS PASS PASS PASS
Test 0029: Simple @index map PASS PASS PASS PASS PASS PASS PASS
Test 0030: non-matching @container: @index PASS PASS PASS PASS PASS PASS PASS
Test 0031: Compact @reverse PASS PASS PASS PASS PASS PASS PASS
Test 0032: Compact keys in reverse-maps PASS PASS PASS PASS PASS PASS PASS
Test 0033: Compact reverse-map to reverse property PASS PASS PASS PASS PASS PASS PASS
Test 0034: Skip property with @reverse if no match PASS PASS PASS PASS PASS PASS PASS
Test 0035: Compact @reverse node references using strings PASS PASS PASS PASS PASS PASS PASS
Test 0036: Compact reverse properties using index containers PASS PASS PASS PASS PASS PASS PASS
Test 0037: Compact keys in @reverse using @vocab PASS PASS PASS PASS PASS PASS PASS
Test 0038: Index map round-tripping PASS PASS PASS PASS PASS PASS PASS
Test 0039: @graph is array PASS PASS PASS PASS PASS PASS PASS
Test 0040: @list is array PASS PASS PASS PASS PASS PASS PASS
Test 0041: index rejects term having @list PASS PASS PASS PASS PASS PASS PASS
Test 0042: @list keyword aliasing PASS PASS PASS PASS PASS PASS PASS
Test 0043: select term over @vocab PASS PASS PASS PASS PASS PASS PASS
Test 0044: @type: @vocab in reverse-map PASS PASS PASS PASS PASS PASS PASS
Test 0045: @id value uses relative IRI, not term PASS PASS PASS PASS PASS PASS PASS
Test 0046: multiple objects without @context use @graph PASS PASS PASS PASS PASS PASS PASS
Test 0047: Round-trip relative URLs PASS PASS PASS PASS PASS PASS PASS
Test 0048: term with @language: null PASS PASS PASS PASS PASS PASS PASS
Test 0049: Round tripping of lists that contain just IRIs PASS PASS PASS PASS PASS PASS PASS
Test 0050: Reverse properties require @type: @id to use string values PASS PASS PASS PASS PASS PASS PASS
Test 0051: Round tripping @list with scalar PASS PASS PASS PASS PASS PASS PASS
Test 0052: Round tripping @list with scalar and @graph alias PASS PASS PASS PASS PASS PASS PASS
Test 0053: Use @type: @vocab if no @type: @id PASS PASS PASS PASS PASS PASS PASS
Test 0054: Compact to @type: @vocab and compact @id to term PASS PASS PASS PASS PASS PASS PASS
Test 0055: Round tripping @type: @vocab PASS PASS PASS PASS PASS PASS PASS
Test 0056: Prefer @type: @vocab over @type: @id for terms PASS PASS PASS PASS PASS PASS PASS
Test 0057: Complex round tripping @type: @vocab and @type: @id PASS PASS PASS PASS PASS PASS PASS
Test 0058: Prefer @type: @id over @type: @vocab for non-terms PASS PASS PASS PASS PASS PASS PASS
Test 0059: Term with @type: @vocab if no @type: @id PASS PASS PASS PASS PASS PASS PASS
Test 0060: Term with @type: @id if no @type: @vocab and term value PASS PASS PASS PASS PASS PASS PASS
Test 0061: @type: @vocab/@id with values matching either PASS PASS PASS PASS PASS PASS PASS
Test 0062: @type: @vocab and relative IRIs PASS PASS PASS PASS PASS PASS PASS
Test 0063: Compact IRI round-tripping with @type: @vocab PASS PASS PASS PASS PASS PASS PASS
Test 0064: Compact language-tagged and indexed strings to index-map PASS PASS PASS PASS PASS PASS PASS
Test 0065: Language-tagged and indexed strings with language-map PASS PASS PASS PASS PASS PASS PASS
Test 0066: Relative IRIs PASS PASS PASS PASS PASS PASS PASS
Test 0067: Reverse properties with blank nodes PASS PASS PASS PASS PASS PASS PASS
Test 0068: Single value reverse properties PASS PASS PASS PASS PASS PASS PASS
Test 0069: Single value reverse properties with @set PASS PASS PASS PASS PASS PASS PASS
Test 0070: compactArrays option PASS PASS PASS PASS PASS PASS PASS
Test 0071: input has multiple @contexts, output has one UNTESTED PASS PASS PASS PASS PASS PASS
Percentage passed out of 71 Tests 98.6% 100.0% 100.0% 100.0% 100.0% 100.0% 100.0%

2.2 Error handling

JSON-LD to Expansion tests use object compare

Test JSONLD-Java JSON::LD jsonld.js browser jsonld.js node.js php-json-ld PyLD JsonLD
Test 0001: Keywords cannot be aliased to other keywords PASS PASS PASS PASS PASS PASS PASS
Test 0002: A context may not include itself recursively (direct) PASS PASS PASS PASS PASS PASS PASS
Test 0003: A context may not include itself recursively (indirect) PASS PASS PASS PASS PASS PASS PASS
Test 0004: Error dereferencing a remote context PASS PASS PASS PASS PASS PASS PASS
Test 0005: Invalid remote context PASS PASS PASS PASS PASS PASS PASS
Test 0006: Invalid local context PASS PASS PASS PASS PASS PASS PASS
Test 0007: Invalid base IRI PASS PASS PASS PASS PASS PASS PASS
Test 0008: Invalid vocab mapping PASS PASS PASS PASS PASS PASS PASS
Test 0009: Invalid default language PASS PASS PASS PASS PASS PASS PASS
Test 0010: Cyclic IRI mapping PASS PASS PASS PASS PASS PASS PASS
Test 0011: Invalid term definition PASS PASS PASS PASS PASS PASS PASS
Test 0012: Invalid type mapping (not a string) PASS PASS PASS PASS PASS PASS PASS
Test 0013: Invalid type mapping (not absolute IRI) PASS PASS PASS PASS PASS PASS PASS
Test 0014: Invalid reverse property (contains @id) PASS PASS PASS PASS PASS PASS PASS
Test 0015: Invalid IRI mapping (@reverse not a string) PASS PASS PASS PASS PASS PASS PASS
Test 0016: Invalid IRI mapping (not an absolute IRI) PASS PASS PASS PASS PASS PASS PASS
Test 0017: Invalid reverse property (invalid @container) PASS PASS PASS PASS PASS PASS PASS
Test 0018: Invalid IRI mapping (@id not a string) PASS PASS PASS PASS PASS PASS PASS
Test 0019: Invalid keyword alias PASS PASS PASS PASS PASS PASS PASS
Test 0020: Invalid IRI mapping (no vocab mapping) PASS PASS PASS PASS PASS PASS PASS
Test 0021: Invalid container mapping PASS PASS PASS PASS PASS PASS PASS
Test 0022: Invalid language mapping PASS PASS PASS PASS PASS PASS PASS
Test 0023: Invalid IRI mapping (relative IRI in @type) PASS PASS PASS PASS PASS PASS PASS
Test 0024: List of lists (from array) PASS PASS PASS PASS PASS PASS PASS
Test 0025: Invalid reverse property map PASS PASS PASS PASS PASS PASS PASS
Test 0026: Colliding keywords PASS PASS PASS PASS PASS PASS PASS
Test 0027: Invalid @id value PASS PASS PASS PASS PASS PASS PASS
Test 0028: Invalid type value PASS PASS PASS PASS PASS PASS PASS
Test 0029: Invalid value object value PASS PASS PASS PASS PASS PASS PASS
Test 0030: Invalid language-tagged string PASS PASS PASS PASS PASS PASS PASS
Test 0031: Invalid @index value PASS PASS PASS PASS PASS PASS PASS
Test 0032: List of lists (from array) PASS PASS PASS PASS PASS PASS PASS
Test 0033: Invalid @reverse value PASS PASS PASS PASS PASS PASS PASS
Test 0034: Invalid reverse property value (in @reverse) PASS PASS PASS PASS PASS PASS PASS
Test 0035: Invalid language map value PASS PASS PASS PASS PASS PASS PASS
Test 0036: Invalid reverse property value (through coercion) PASS PASS PASS PASS PASS PASS PASS
Test 0037: Invalid value object (unexpected keyword) PASS PASS PASS PASS PASS PASS PASS
Test 0038: Invalid value object (@type and @language) PASS PASS PASS PASS PASS PASS PASS
Test 0039: Invalid language-tagged value PASS PASS PASS PASS PASS PASS PASS
Test 0040: Invalid typed value PASS PASS PASS PASS PASS PASS PASS
Test 0041: Invalid set or list object PASS PASS PASS PASS PASS PASS PASS
Test 0042: Compaction to list of lists PASS PASS PASS PASS PASS PASS PASS
Test 0043: Conflicting indexes PASS PASS PASS PASS PASS PASS PASS
Percentage passed out of 43 Tests 100.0% 100.0% 100.0% 100.0% 100.0% 100.0% 100.0%

2.3 Expansion

JSON-LD to Expansion tests use object compare

Test Argo.Core.JsonLd JSONLD-Java JSON::LD jsonld.js browser jsonld.js node.js php-json-ld PyLD JsonLD
Test 0001: drop free-floating nodes PASS PASS PASS PASS PASS PASS PASS PASS
Test 0002: basic PASS PASS PASS PASS PASS PASS PASS PASS
Test 0003: drop null and unmapped properties PASS PASS PASS PASS PASS PASS PASS PASS
Test 0004: optimize @set, keep empty arrays PASS PASS PASS PASS PASS PASS PASS PASS
Test 0005: do not expand aliased @id/@type PASS PASS PASS PASS PASS PASS PASS PASS
Test 0006: alias keywords PASS PASS PASS PASS PASS PASS PASS PASS
Test 0007: date type-coercion PASS PASS PASS PASS PASS PASS PASS PASS
Test 0008: @value with @language PASS PASS PASS PASS PASS PASS PASS PASS
Test 0009: @graph with terms PASS PASS PASS PASS PASS PASS PASS PASS
Test 0010: native types PASS PASS PASS PASS PASS PASS PASS PASS
Test 0011: coerced @id PASS PASS PASS PASS PASS PASS PASS PASS
Test 0012: @graph with embed PASS PASS PASS PASS PASS PASS PASS PASS
Test 0013: expand already expanded PASS PASS PASS PASS PASS PASS PASS PASS
Test 0014: @set of @value objects with keyword aliases PASS PASS PASS PASS PASS PASS PASS PASS
Test 0015: collapse set of sets, keep empty lists PASS PASS PASS PASS PASS PASS PASS PASS
Test 0016: context reset PASS PASS PASS PASS PASS PASS PASS PASS
Test 0017: @graph and @id aliased PASS PASS PASS PASS PASS PASS PASS PASS
Test 0018: override default @language PASS PASS PASS PASS PASS PASS PASS PASS
Test 0019: remove @value = null PASS PASS PASS PASS PASS PASS PASS PASS
Test 0020: do not remove @graph if not at top-level PASS PASS PASS PASS PASS PASS PASS PASS
Test 0021: do not remove @graph at top-level if not only property PASS PASS PASS PASS PASS PASS PASS PASS
Test 0022: expand value with default language PASS PASS PASS PASS PASS PASS PASS PASS
Test 0023: Expanding list/set with coercion PASS PASS PASS PASS PASS PASS PASS PASS
Test 0024: Multiple contexts PASS PASS PASS PASS PASS PASS PASS PASS
Test 0025: Problematic IRI expansion tests PASS PASS PASS PASS PASS PASS PASS PASS
Test 0026: Term definition with @id: @type PASS PASS PASS PASS PASS PASS PASS PASS
Test 0027: Duplicate values in @list and @set PASS PASS PASS PASS PASS PASS PASS PASS
Test 0028: Use @vocab in properties and @type but not in @id PASS PASS PASS PASS PASS PASS PASS PASS
Test 0029: Relative IRIs PASS PASS PASS PASS PASS PASS PASS PASS
Test 0030: Language maps PASS PASS PASS PASS PASS PASS PASS PASS
Test 0031: type-coercion of native types PASS PASS PASS PASS PASS PASS PASS PASS
Test 0032: Null term and @vocab PASS PASS PASS PASS PASS PASS PASS PASS
Test 0033: Using @vocab with with type-coercion PASS PASS PASS PASS PASS PASS PASS PASS
Test 0034: Multiple properties expanding to the same IRI PASS PASS PASS PASS PASS PASS PASS PASS
Test 0035: Language maps with @vocab, default language, and colliding property PASS PASS PASS PASS PASS PASS PASS PASS
Test 0036: Expanding @index PASS PASS PASS PASS PASS PASS PASS PASS
Test 0037: Expanding @reverse PASS PASS PASS PASS PASS PASS PASS PASS
Test 0038: Expanding blank node labels PASS PASS PASS PASS PASS PASS PASS PASS
Test 0039: Using terms in a reverse-maps PASS PASS PASS PASS PASS PASS PASS PASS
Test 0040: language and index expansion on non-objects PASS PASS PASS PASS PASS PASS PASS PASS
Test 0041: @language: null resets the default language PASS PASS PASS PASS PASS PASS PASS PASS
Test 0042: Reverse properties PASS PASS PASS PASS PASS PASS PASS PASS
Test 0043: Using reverse properties inside a @reverse-container PASS PASS PASS PASS PASS PASS PASS PASS
Test 0044: Index maps with language mappings PASS PASS PASS PASS PASS PASS PASS PASS
Test 0045: Top-level value objects PASS PASS PASS PASS PASS PASS PASS PASS
Test 0046: Free-floating nodes PASS PASS PASS PASS PASS PASS PASS PASS
Test 0047: Free-floating values in sets and free-floating lists PASS PASS PASS PASS PASS PASS PASS PASS
Test 0048: Terms are ignored in @id PASS PASS PASS PASS PASS PASS PASS PASS
Test 0049: String values of reverse properties PASS PASS PASS PASS PASS PASS PASS PASS
Test 0050: Term definitions with prefix separate from prefix definitions PASS PASS PASS PASS PASS PASS PASS PASS
Test 0051: Expansion of keyword aliases in term definitions PASS PASS PASS PASS PASS PASS PASS PASS
Test 0052: @vocab-relative IRIs in term definitions PASS PASS PASS PASS PASS PASS PASS PASS
Test 0053: Expand absolute IRI with @type: @vocab PASS PASS PASS PASS PASS PASS PASS PASS
Test 0054: Expand term with @type: @vocab PASS PASS PASS PASS PASS PASS PASS PASS
Test 0055: Expand @vocab-relative term with @type: @vocab PASS PASS PASS PASS PASS PASS PASS PASS
Test 0056: Use terms with @type: @vocab but not with @type: @id PASS PASS PASS PASS PASS PASS PASS PASS
Test 0057: Expand relative IRI with @type: @vocab PASS PASS PASS PASS PASS PASS PASS PASS
Test 0058: Expand compact IRI with @type: @vocab PASS PASS PASS PASS PASS PASS PASS PASS
Test 0059: Reset @vocab by setting it to null PASS PASS PASS PASS PASS PASS PASS PASS
Test 0060: Overwrite document base with @base and reset it again PASS PASS PASS PASS PASS PASS PASS PASS
Test 0061: Coercing native types to arbitrary datatypes PASS PASS PASS PASS PASS PASS PASS PASS
Test 0062: Various relative IRIs with with @base PASS PASS PASS PASS PASS PASS PASS PASS
Test 0063: Reverse property and index container PASS PASS PASS PASS PASS PASS PASS PASS
Test 0064: bnode values of reverse properties PASS PASS PASS PASS PASS PASS PASS PASS
Test 0065: Drop unmapped keys in reverse map PASS PASS PASS PASS PASS PASS PASS PASS
Test 0066: Reverse-map keys with @vocab PASS PASS PASS PASS PASS PASS PASS PASS
Test 0067: prefix://suffix not a compact IRI PASS PASS PASS PASS PASS PASS PASS PASS
Test 0068: _:suffix values are not a compact IRI PASS PASS PASS PASS PASS PASS PASS PASS
Test 0069: Compact IRI as term with type mapping PASS PASS PASS PASS PASS PASS PASS PASS
Test 0070: Compact IRI as term defined using equivalent compact IRI PASS PASS PASS PASS PASS PASS PASS PASS
Test 0071: Redefine terms looking like compact IRIs PASS PASS PASS PASS PASS PASS PASS PASS
Test 0072: Redefine term using @vocab, not itself PASS PASS PASS PASS PASS PASS PASS PASS
Test 0073: @context not first property PASS PASS PASS PASS PASS PASS PASS PASS
Test 0074: @id not first property PASS PASS PASS PASS PASS PASS PASS PASS
Test 0075: @vocab as blank node identifier PASS PASS PASS PASS PASS PASS PASS PASS
Test 0076: base option overrides document location PASS PASS PASS PASS PASS PASS PASS PASS
Test 0077: expandContext option PASS PASS PASS PASS PASS <