Схема <[объект объекта]> уже существует с другим определением

1

Получение Schema <[object Object]> already exists with different definition ошибкой Schema <[object Object]> already exists with different definition при попытке ссылаться на 2 схемы в одном.

Пожалуйста, поправьте меня, если я что-то сделаю неправильно:

Схема купонов в coupons.js

const COUPONS_SCHEMA = {
  "id": "/Coupons",
  "items": {
    "id": "/items",
    "properties": {
      "Description": {
        "type": "string"
      },
      "Ean": {
        "type": "string"
      },
      "ExpiryDate": {
        "type": "string"
      },
      "Id": {
        "type": "string"
      },
      "Name": {
        "type": "string"
      },
      "StartDate": {
        "type": "string"
      },
      "Type": {
        "type": "string"
      },
      "VoucherValue": {
        "type": "string"
      }
    },
    "type": "object"
  },
  "type": "array"
};

export default COUPONS_SCHEMA;

Схема вознаграждений в rewards.js

const REWARDS_SCHEMA = {
    "id": "/Rewards",
    "items": {
        "id": "/items",
        "properties": {
            "PromotionId": {

                "type": "string"
            },
            "Reward Amount": {

                "type": "string"
            },
            "RewardType": {

                "type": "string"
            }
        },
        "type": "object"
    },
    "type": "array"
};

export default REWARDS_SCHEMA;

Ссылка на приведенные выше схемы в схеме скидок

import { Validator } from 'jsonschema';
import Coupons from './coupons';
import Rewards from './rewards';
let validator = new Validator();


const DISCOUNTS_SCHEMA = {
  "id": "/Discounts",
  "properties": {
    "Coupons": {
    "$ref": "/Coupons"
    },
    "PromotionalClubCardPoints": {
      "type": "string"
    },
    "Rewards": {
      "$ref": "/Rewards"
    },
    "StaffDiscount": {
      "type": "string"
    },
    "StandardClubCardPoints": {
      "type": "string"
    },
    "TotalClubCardPoints": {
      "type": "string"
    },
    "TotalCoupons": {
      "type": "string"
    },
    "TotalGiftCards": {
      "type": "string"
    },
    "TotalGreenClubCardPoints": {
      "type": "string"
    },
    "TotalSavings": {
      "type": "string"
    },
    "TotalVouchers": {
      "type": "string"
    }
  },
  "type": "object"
};

validator.addSchema(Coupons,'/Discounts');
validator.addSchema(Rewards,'/Discounts');


export default DISCOUNTS_SCHEMA;

and getting the below error 

 throw new Error('Schema <'+schema+'> already exists with different definition');
        ^

Error: Schema <[object Object]> already exists with different definition
    at Validator.addSubSchema (/Users/repo/node_modules/jsonschema/lib/validator.js:72:15)
    at Validator.addSubSchemaArray (/Users/repo/node_modules/jsonschema/lib/validator.js:99:10)
    at Validator.addSubSchema (/Users/repo/node_modules/jsonschema/lib/validator.js:80:8)
    at Validator.addSchema (/Users/repo/node_modules/jsonschema/lib/validator.js:48:8)
    at Object.<anonymous> (/Users/repo/src/schema/discounts.js:47:11)
    at Module._compile (module.js:570:32)
    at loader (/Users/repo/node_modules/babel-register/lib/node.js:144:5)
    at Object.require.extensions.(anonymous function) [as .js] (/Users/repo/node_modules/babel-register/lib/node.js:154:7)
    at Module.load (module.js:487:32)
    at tryModuleLoad (module.js:446:12)

Пожалуйста, исправьте меня, если я делаю что-то неправильно в определении схем.

Теги:
npm
jsonschema
json-schema-validator

1 ответ

0

Вероятно, проблема заключается в том, что вы используете id//элементы в coupons.js и rewards.js. id должен быть универсальным. Вот почему они должны быть абсолютными URI.

  • 0
    id '/ items' используется для определения его как массива. Мы можем управлять этим нашим, поскольку его родительские идентификаторы разные.
  • 0
    Вы неправильно поняли, что я вам говорю. id не вкладывают так, как вы ожидаете. Они должны быть уникальными без учета того, где они определены. Вместо этого вы могли бы использовать «/ Coupon / items» и «/ Rewards / items», и это будет то, что вы ожидаете, но вы не можете использовать «/ items» дважды независимо от id родителей. Это не концепция, которая существует в JSON-схеме.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню