Почему Ajv не может разрешить ссылку во время компиляции?

Ниже приведен пример схемы JSON, которую я пытаюсь скомпилировать и использовать для проверки. Для этого я использую модуль 'ajv' npm.

Вот код, который я запускаю...

var ajv = require('ajv')();

var contactSchema = {
    "$schema": "http://json-schema.org/draft-04/schema#",
    "title": "Contact",
    "type": "object",
    "additionalProperties": false,
    "properties": {
        "work": { "$ref": "#definitions/phone" },
        "home": { "$ref": "#definitions/phone" },
    },
    "definitions": {
        "phone": {
            "type": "object",
            "required": ["number"],
            "properties": {
                "number": { "type": "string" },
                "extension": { "type": "string" }
            }
        }
    }
};

var validator = ajv.compile(contactSchema);

Когда я запускаю этот код, я получаю следующее исключение.

Error: can't resolve reference #definitions/phone from id #

Кто-нибудь еще сталкивался с такой проблемой? Любая идея, что я могу делать неправильно?


person ra9r    schedule 28.10.2016    source источник


Ответы (1)


Ваша ссылка неверна (хотя и действительна), она должна быть #/definitions/phone

В качестве альтернативы, чтобы заставить его работать, вы можете добавить "id": "#definitions/phone" в схему телефона, но чаще используется "id": "#phone" (и также обновляется $refs).

person esp    schedule 28.10.2016
comment
Это решило проблему, но не могли бы вы объяснить, почему #/definitions/phone работало, а #definitions/phone нет? Вся документация от разработчика будет означать обратное. Спасибо! - person ra9r; 28.10.2016
comment
На какую документацию вы ссылаетесь? Кстати, я разработчик :) Это по спецификации, ссылка в текущей схеме - #, за которой следует указатель JSON, указатель JSON начинается с / - person esp; 28.10.2016
comment
Отличная библиотека, спасибо, что предоставили ее для всех нас. Что касается вашего вопроса, я мог бы поклясться, что видел это в примерах на веб-сайте json-schema.org, но я не могу найти никаких примеров в качестве доказательства. Значит, я, должно быть, слепну или схожу с ума. Спасибо за быстрый ответ. - person ra9r; 29.10.2016