Как использовать ссылки в JustinRainbow JsonValidator

Может кто-нибудь сказать мне, как сделать так, чтобы валидатор JS-схемы JustinRainbow мог найти ссылки.

Это схема foobar, которую я пытаюсь проверить:

{
"title": "foobar schema",
"type": "object",
"properties": {
"pagination": {
"$ref": "#/definitions/pagination"}
},
"required": ["pagination"]
}

И определение схемы нумерации страниц содержится в отдельном файле на моем компьютере.

Попытка проверить это, не сообщая валидатору JSON, как разрешать ссылки следующим образом:

$uriRetriever = new JsonSchema\Uri\UriRetriever();
$refResolver = new JsonSchema\RefResolver($uriRetriever, $uriResolver);
$schema = $refResolver->resolve("file://".realpath(__DIR__."/foobar.json"));

Выдает сообщение об ошибке:

File: file://features/foobar.json is found, but could not resolve fragment: #/definitions/pagination (JsonSchema\Exception\UnresolvableJsonPointerException)

Что достаточно справедливо, поскольку у валидатора нет способа узнать, как найти файл, содержащий определение схемы нумерации страниц …. так как я могу сказать RefResolver, как найти определение схемы нумерации страниц?

Я бы предпочел иметь возможность разрешать файл через локальную файловую систему, а не использовать URL-адреса на веб-сервере.

4

Решение

Тип ссылки, используемой в вашей схеме, является указатель json ссылаясь на другую часть вашего файла схемы. Вам нужно указать свойства определения / пагинации, чтобы избавиться от ошибки.

{
"title": "foobar schema",
"type": "object",
"properties": {
"pagination": {
"$ref": "#/definitions/pagination"}
},
"required": ["pagination"],
"definitions": {
"pagination": {

}
}
}

Чтобы обратиться к определению в другом файле, вы можете написать что-то вроде:

"pagination": {
"$ref": "pagination.schema.json#"}

Или даже укажите конкретный узел во внешнем файле:

"pagination": {
"$ref": "external_definitions.schema.json#/definitions/pagination"}

external_definitions.schema.json / pagination.schema.json следует искать в той же папке, что и ваша схема, содержащая ссылку. Библиотека должна также предоставить некоторые API для настройки этого поиска.

В моем проекте я использую JustinRainbow JsonValidator для php. Он не позволяет предоставлять пользовательский распознаватель, но местоположение, в котором находятся указанные файлы, может зависеть от значения «id» в схеме.

Пример, схема в main.schema.json:

{
"id": "http://myweb.com/schemas/main.schema.json#",
"title": "foobar schema",
"type": "object",
"properties": {
"pagination": {
"$ref": "pagination.schema.json#"}
},
"required": ["pagination"]
}

при проверке этой схемы валидатор пытается загрузить pagination.schema.json, используя:

php_get_contents('http://myweb.com/schemas/pagination.schema.json');
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]