2016-10-28 10 views
3

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

Вот код, который я бег ...

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 # 

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

ответ

1

Ваша ссылка неверна (хотя она действует), это должно быть #/Определения/телефон

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

+0

Это устранило проблему, но вы могли бы объяснить, почему «#/определения/телефон» работал, а «# определения/телефон» - нет? Вся документация от разработчика подразумевает иное. Благодаря! – ra9r

+0

В какой документации вы ссылаетесь? Я разработчик btw :) Это спецификацией, ссылка в текущей схеме равна #, за которой следует указатель JSON, указатель JSON начинается с «/» – esp

+0

Отличная библиотека, спасибо за вклад в нее для остальных из нас. Что касается вашего вопроса, я мог бы поклясться, что я видел это в примерах на сайте json-schema.org, но для жизни меня не могу найти примеров в качестве доказательства. Поэтому я должен ослепнуть или сумасшедший. Спасибо за быстрый ответ. – ra9r