Ошибка проверки JSONSchema с $ ref (Draft v7) - PullRequest
0 голосов
/ 20 марта 2020

Я создал схему JSON, следуя черновой спецификации v7. Схема выглядит следующим образом:

{
  "type": "object",

  "properties": {

        "songs": {
            "type": "array",
            "items": {
                "type": "object",      
                "properties": {

                    "composition": {
                        "type": "object",

                        "properties": {
                            "title": {
                                "type": "string"
                            },
                            "publishing": {
                                "type": "array",

                                "items": {
                                    "type": "object",
                                    "required": ["publisherId","territory"],

                                    "definitions": {
                                        "categoryList": {
                                            "type": "object",
                                            "properties": {
                                                "BR": {
                                                "type": "number"
                                                }
                                            }
                                        }
                                    },
                                    "properties": {
                                        "publisherId": {
                                            "type": "integer"
                                        },
                                        "territory": {
                                            "$ref": "#/definitions/categoryList"
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "recordings": {
                        "type": "array",
                        "items": {
                            "type": "object",
                            "properties": {
                                "songVersion": {
                                    "type": "string"
                                },
                                "album": {
                                    "type": "object",
                                    "properties": {
                                        "title": {
                                        "type": "string"
                                        }                    
                                    }
                                }                  
                            }              
                        }         
                    }

                }

            }
        }
    }
}

, но получена ошибка. Не удалось разрешить ссылку на схему '# / definitions / categoryList'. Путь 'properties.songs.items.properties.composition.properties.publishing.items.properties.territory', строка 40, позиция 24. Если я опускаю часть определения, она отлично работает

1 Ответ

0 голосов
/ 23 марта 2020

Самый простой способ объяснить, почему эталонное разрешение не работает так, как вы ожидаете, - это поговорить об измененном примере из самой базовой спецификации draft-07.

   {
       "definitions": {
           "A": { },
           "B": {
               "definitions": {
                   "X": { },
                   "Y": { }
               }
           }
       }
   }

Документ root объект, имеющий свойство definitions.

Для доступа к #/definitions/A вы можете использовать ссылку #/definitions/A.

Для доступа к #/definitions/B/definitions/X вы можете использовать ссылку #/definitions/B/definitions/X.

Ссылка в вашей схеме должна знать полный путь к подсхеме из документа root.

Я думаю, вы предположили, что URI относительно ближайшая подсхема или подсхема, в которой она используется, но это не так.

Ссылка: https://tools.ietf.org/html/draft-handrews-json-schema-01#section -8.2.4

Пример включает в себя более исчерпывающий множество примеров. Думайте о ссылках на URI так, как если бы вы привязывали тег к HTML. Когда доменная часть URI не включена, он «воображается» на своем месте для выполнения разрешения URI.

Дайте мне знать, если у вас есть какие-либо дополнительные вопросы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...