JSON-схема - требует, чтобы объект не имел определенного имени - PullRequest
0 голосов
/ 19 мая 2018

Я хотел бы создать схему json (draft-06) на основе следующего объекта настроек:

"settingData" : {
  "$id": "#settingData",
  "oneOf" : [
    { "type"  : "number" },
    { "type" : "array", "items" : { "oneOf" : [ { "type" : "number"},{ "type" : "null" } ] } },
    { "type" : "array", "items" : { "$ref" : "#setting" } }
  ]
},
"setting" : {
  "$id": "#setting",
  "type" : "object",
  "properties" : {
    "name": {
      "type": "string",
      "title": "type of setting",
      "examples": [
        "led-brightness"
      ]
    },
    "data": {
      "$ref" : "#settingData"
    }
  },
  "required" : ["type","data"]
},

Я хотел бы создать специализацию этого объекта с именем настройки "status"-ranges "и и содержит подмножество приведенных выше определений.Как я могу сделать так, чтобы мои «настройки» вышеупомянутого типа не применялись, когда имя «диапазоны состояния».Я думал об использовании pattern , но шаблоны регулярных выражений, которые соответствуют всему, кроме определенной строки, кажутся немного особенными, я попробовал один, и это не сработало.Затем есть ключевое слово not , но я все еще ищу примеры, как это можно применить.Есть идеи ?

1 Ответ

0 голосов
/ 22 мая 2018

Это сработало для меня, используя регулярное выражение: "pattern": "^ ((?! status-range).) * $" В свойстве name настройки.Это исключает строку «диапазоны состояний из разрешенных имен. В этом случае« специализированная »настройка имеет постоянное имя« диапазоны состояния », как показано ниже:

"settingData" : {
  "$id": "#settingData",
  "oneOf" : [
    { "type"  : "number" },
    { "type" : "array", "items" : { "oneOf" : [ { "type" : "number"},{ "type" : "null" } ] } },
    { "type" : "array", "items" : { "$ref" : "#setting" } }
  ]
},
"setting" : {
  "$id": "#setting",
  "type" : "object",
  "properties" : {
    "name": {
      "type": "string",
      "pattern": "^((?!status-ranges).)*$",
      "title": "type of setting",
      "examples": [
        "led-brightness"
      ]
    },
    "data": {
      "$ref" : "#settingData"
    }
  },
  "required" : ["type","data"]
},
"statusRange" : {
  "$id": "#statusRange",
  "type" : "object",
  "properties" : {
    "name": {
      "const": "status-ranges"
    },
    "data": {
      "$ref" : "#settingData"
    }
  },
  "required" : ["type","data"]
},

Я все еще хотел бы выяснить, как это сделать"not "работает в JSON Schema, хотя.

...