2013-08-22 2 views
3

Я хочу, чтобы общие части json-схемы были записаны в файл, а затем ссылались на этот файл из основного файла схемы. Таким образом, в основном вместо 1 большого файла схемы json, несколько файлов, которые ссылаются друг на друга. Я использую json-schema-validator lib для проверки.JSONSchema разбивает один большой файл схемы на несколько логических файлов меньшего размера

Например:

$ ls schemas/ 
response_schema.json results_schema.json 

$ cat schemas/response_schema.json 
{ 
    "$schema": "http://json-schema.org/draft-04/schema", 
    "type": "object", 
    "required": [ "results" ], 
    "properties": { 
     "results": "####Reference results_schema.json file here somehow####" 
    } 
} 

$ cat schemas/results_schema.json 
{ 
    "$schema": "http://json-schema.org/draft-04/schema", 
    "type": "array", 
    "items": { 
     "type": "object", 
     "required": ["type", "name"], 
     "properties": { 
      "name": { "type": "string" }, 
      "dateOfBirth": { "type": "string" } 
     } 
    } 
} 
+0

Посмотрите на [JSON Schema: основные определения и терминологию] (http://tools.ietf.org/html/draft-zyp-json-schema-04#section-3.4) – atomman

+0

Thx atomman. Копаем больше найденного частичного ответа. '" results ": {\t" $ ref ":" file: // localhost/c: /eclipse-workspaces/myproject/src/test/resources/schemas/results.json "}' Все еще не знаю, как дать относительные пути, хотя! – nishant

+0

Попробуйте нажать на свой сервер и использовать в качестве ссылки './Resources/schemas/results.json'. Я не знаю, будет ли это работать, но вы должны хотя бы увидеть полный URL-адрес в консоли, когда библиотека пытается его решить. – atomman

ответ

6

После решения работал для меня:

"results": { 
     "$ref": "file:src/test/resources/schemas/results.json" 
    } 

выше решение удовлетворяет моим требованиям:

  1. Все мои файлы схемы находятся на локальной файловой системе, а не размещен по URL-адресу
  2. Указанный путь относительный в каталог, в котором я запускаю mvn-цели.
+0

Нет причин, чтобы ссылки не могли быть относительными. :) Они разрешены относительно текущего пути схемы (или «id», если это определено вместо этого). – cloudfeet

+0

Для меня это совсем не сработало. Я попробовал также некоторые альтернативы и дважды проверил их. – Flowryn

0

Это, как я сделал это:

Учитывая следующую структуру файла из корневого каталога вашего приложения:

/schemas/ 
     response_schema.json 
     results_schema.json 

response_schema.json:

{ 
    "$schema": "http://json-schema.org/draft-04/schema", 
    "id": "resource:/schemas/response_schema#", 
    "type": "object", 
    "required": [ "results" ], 
    "properties": { 
     "results": { 
      "type": "object", 
      "$ref": "results_schema.json" 
    } 
} 

results_schema. json:

{ 
    "$schema": "http://json-schema.org/draft-04/schema", 
    "id": "resource:/schemas/results_schema#", 
    "type": "array", 
     "items": { 
      "type": "object", 
      "required": ["type", "name"], 
     "properties": { 
      "name": { "type": "string" }, 
      "dateOfBirth": { "type": "string" } 
     } 
    } 
} 

утвердивший с JsonValidator.java

Смежные вопросы