Определите тип карты, используя json-schema v4

Я пытаюсь определить ссылочную схему для использования в качестве типа карты Cassandra CQL с текстовыми полями. В частности, я хочу сопоставить URI со строками.

Прямо сейчас у меня есть:

"scope": {
      "type": "object",
      "properties": {
        "uri": {
          "type": "string",
          "format": "uri"
        },
        "permission": {
          "type": "string",
          "enum": ["read_only", "read_write", "write_only"]
        }
      },
      "required": ["uri", "permission"],
      "additionalProperties": false
    }

Это хорошо для таких данных, как

{"uri":"http://example.com",
  "permission": "read_only"}

Но мне нужна схема для таких данных, как

{"http://example.com": "read_only"}

http://spacetelescope.github.io/understanding-json-schema/reference/object.html имеет решение:

{
  "type": "object",
  "patternProperties": {
    "^S_": { "type": "string" },
    "^I_": { "type": "integer" }
  }
}

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

Поскольку количество URI, которые у меня есть, ограничено, сопоставление enum с enum также было бы решением. Это выполнимо?


person EthernetCable    schedule 12.03.2014    source источник


Ответы (1)


Если мне будет позволено ответить на мой собственный вопрос, я считаю, что решение состоит в том, чтобы использовать определение PatternProperties для ключа с очень конкретным регулярным выражением. Значение может быть любого типа, поддерживаемого json-схемой, включая другое регулярное выражение. В моем случае это перечисление.

Таким образом, определение выглядит примерно так:

  "patternProperties": {
    "^https:\/\/www.example.com\/auth\/\\w+$": {
      "type": "string",
      "enum": ["read_only", "read_write", "write_only"]
    }
  },
  "additionalProperties": false
person EthernetCable    schedule 07.11.2014