json-schema-ref-parser icon indicating copy to clipboard operation
json-schema-ref-parser copied to clipboard

Syntax erro - Pointers must begin with "#/"

Open MrRoyce opened this issue 8 years ago • 10 comments

Hi there, I just started getting this error today. Not sure what changed or how to fix it.

json-schema-ref-parser-syntax-error

Any ideas?

MrRoyce avatar Jul 17 '17 14:07 MrRoyce

This error means that you have an invalid $ref somewhere in your schema. Without actually seeing your schema, I can't get any more specific than that.

JamesMessinger avatar Jul 20 '17 12:07 JamesMessinger

This is a valid bug; it violates the spec WRT internal links. Internal links are not necessarily JSON pointers.

$ node -e 'require("json-schema-ref-parser").dereference({"$ref": "#bar", "definitions": {"bar": {"$id": "#bar"}}}).then(s=>console.log(s))'
(node:17237) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 2): 
SyntaxError: Invalid $ref pointer "bar". Pointers must begin with "#/"

$ ajv -d <(echo null) -s <(echo '{"$ref": "#bar", "definitions": {"bar": {"$id": "#bar"}}}')
/dev/fd/63 valid

ajv gets it right

see also

http://json-schema.org/latest/json-schema-core.html#rfc.section.9.2 $id

"To name subschemas in a JSON Schema document, subschemas can use "$id" to give themselves a document-local identifier. This is done by setting "$id" to a URI reference consisting only of a fragment. The fragment identifier MUST begin with a letter ([A-Za-z]), followed by any number of letters, digits ([0-9]), hyphens ("-"), underscores ("_"), colons (":"), or periods (".")."

http://json-schema.org/latest/json-schema-core.html#rfc.section.9.2.1 Internal links

"Schemas can be identified by any URI that has been given to them, including a JSON Pointer or their URI given directly by "$id".

Tools SHOULD take note of the URIs that schemas, including subschemas, provide for themselves using "$id". This is known as "Internal referencing"."

http://json-schema.org/latest/json-schema-core.html#rfc.section.5 Fragment identifiers

"plain name fragment identifiers are reserved for referencing locally named schemas. All fragment identifiers that do not match the JSON Pointer syntax MUST be interpreted as plain name fragment identifiers."

n1ywb avatar Jul 28 '17 20:07 n1ywb

as a stopgap the program could simply ignore internal refs. Not ideal but better than crashing.

n1ywb avatar Jul 31 '17 15:07 n1ywb

Example dereferencing local refs

      _walkSchema(schema, accum) {
        return _.reduce(Object.entries(schema), (a, [k, v])=>{
          if (k === '$id') a.ids[v] = a.parent;
          k === '$ref' && a.refs.push(a.parent);
          if (v && typeof v == "object") {
            let oldParent = a.parent;
            a.parent = v;
            let r = this._walkSchema(v, a)
            a.parent = oldParent;
            return r;
          }
          return a;
        }, accum);
      }

      _derefLocal(schema) {
        let stuff = this._walkSchema(
          schema,
          {parent: schema, ids: {}, refs: []}
        );
        stuff.refs.forEach(ref=>{
          if (ref.$ref[0] === '#' && ref.$ref[1] !== '/') {
            _.assign(ref, stuff.ids[ref.$ref]);
            delete ref.$id;
            delete ref.$ref;
          }
        })
        console.log(stuff);
        return schema;
      }

n1ywb avatar Aug 01 '17 18:08 n1ywb

this seems to duplicate https://github.com/BigstickCarpet/json-schema-ref-parser/issues/17

n1ywb avatar Aug 02 '17 15:08 n1ywb

I intend to support inline references in the next version of JSON Schema $Ref Parser, which I have already begun working on. 👍

In the meantime, I will implement @n1ywb's stopgap recommendation of ignoring these references.

JamesMessinger avatar Aug 09 '17 12:08 JamesMessinger

I just published version 3.3.1, which includes the stopgap fix that @n1ywb suggested

JamesMessinger avatar Aug 09 '17 14:08 JamesMessinger

6.1.0 has the same bug

iilei avatar Feb 27 '19 08:02 iilei

I think this might also be related to #136

jrnail23 avatar Jun 26 '20 04:06 jrnail23

Faced it today in 9.0.6 version.

Envek avatar Oct 28 '20 12:10 Envek