digitalbazaar / jsonld.js

A JSON-LD Processor and API implementation in JavaScript
https://json-ld.org/
Other
1.65k stars 195 forks source link

blank node prefixes are not handled correctly #498

Open pchampin opened 1 year ago

pchampin commented 1 year ago

(the same issue is present in PyLD: https://github.com/digitalbazaar/pyld/issues/167)

Consider the following:

{
  "@context": {
    "t": "_:b"
  },
  "@type": "t:x"
}

It expands to

[
  {
    "@type": [
      "t:x"
    ]
  }
]

while it should expand to

[
  {
    "@type": [
      "_:bx"
    ]
  }
]

Indeed, step 14.2.5 of Create Term Definition clearly states:

If term contains neither a colon (:) nor a slash (/), simple term is true, and if the IRI mapping of definition is either an IRI ending with a gen-delim character, or a blank node identifier, set the prefix flag in definition to true.

(emphasis is mine)

Therefore, step 6.4 of IRI Expansion should apply.

davidlehn commented 1 year ago

Appropriate tests should be added to the main JSON-LD test suite.

pchampin commented 1 year ago

@davidlehn I replied on the json-ld-api repo: https://github.com/w3c/json-ld-api/issues/550#issuecomment-1275896908

davidlehn commented 1 year ago

This was not caught because 1.0 tests, such as expand 0038, are no longer run in jsonld.js. (comments in json-ld-api issue). The above "expected" result does occur with the older 1.0 processor playground: https://json-ld.org/playground/1.0/