可以引用JSON整数属性吗?

可以引用JSON整数属性吗?,json,jsonschema,Json,Jsonschema,我有下面的JSON模式,我想验证它和Python unittest { "properties": { "traffic_parameters" { "capacity": { "oneOf": [ { "max_percentage": { "type": "int

我有下面的JSON模式,我想验证它和Python unittest

{
    "properties": {

        "traffic_parameters" {

            "capacity": {

                "oneOf": [
                    {
                        "max_percentage": {

                            "type": "integer",
                            "minimum" : 1,
                            "maximum" : 150
                        },

                        "min_percentage": {

                            "type": "integer",
                            "minimum" : 1,
                            "maximum" : {

                                "$ref": "#/properties/traffic_parameters/capacity/oneOf/max_percentage/minimum"
                            }
                        }
                    },

                    {
                        "percentage_range": {

                            "type": "array",
                            "minItems": 1,
                            "maxItems": 10,
                            "items": {

                                "type": "integer"
                            }
                        }
                    }
                ]
            }
        }
    }
}
使用jsonschema,我验证了整个模式文件。 然而,在编写单元测试时,我得到了以下错误:

capacity = {'oneOf': [{'max_percentage': {'type': 'integer', 'minimum': 1, 'maximum': 150}, 'min_percentage': {'type': 'integer', 'minimum': 1, 'maximum': {'$ref': '#/properties/traffic_parameters/capacity/oneOf/max_percentage/minimum'}}}, {'percentage_range': {'type': 'array', 'minItems': 1, 'maxItems': 10, 'items': {'type': 'integer'}}}]}
-----------------------------------------
index0 = {'max_percentage': {'type': 'integer', 'minimum': 1, 'maximum': 150}, 'min_percentage': {'type': 'integer', 'minimum': 1, 'maximum': {'$ref': '#/properties/traffic_parameters/capacity/oneOf/max_percentage/minimum'}}}
-----------------------------------------
min_percentage = {'type': 'integer', 'minimum': 1, 'maximum': {'$ref': '#/properties/traffic_parameters/capacity/oneOf/max_percentage/minimum'}}
E.........
======================================================================
ERROR: test_invalid_minimum__traffic_parameters__capacity__min_percentage (__main__.SchemaTests)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "test_test-variables_schema.py", line 160, in test_invalid_minimum__traffic_parameters__capacity__min_percentage
    validate(0, min_percentage)
  File "/local/tools/PACKAGES/python3/lib/python3.6/site-packages/jsonschema/validators.py", line 540, in validate
    cls.check_schema(schema)
  File "/local/tools/PACKAGES/python3/lib/python3.6/site-packages/jsonschema/validators.py", line 83, in check_schema
    raise SchemaError.create_from(error)
jsonschema.exceptions.SchemaError: {'$ref': '#/properties/traffic_parameters/capacity/oneOf/max_percentage/minimum'} is not of type 'number'

Failed validating 'type' in schema['properties']['maximum']:
    {'type': 'number'}

On instance['maximum']:
{'$ref': '#/properties/traffic_parameters/capacity/oneOf/max_percentage/minimum'}


    FAILED (errors=1)
我的测试是Python单元测试,测试属性的最小值和最大值。最大值是对上面直接定义的另一个属性的引用

显示的测试测试最小值,但错误的是最大值。如果我测试最大值,错误也会一样,这正是我正在研究的

我尝试将类型重新指定为“最大值”的“整数”,但错误仍然存在

如何在不更改属性类型的情况下克服此错误?引用很重要,因为我希望此属性的最大值与前一个属性的最小值直接相关

还有,在单元测试中引用这些变量还有其他(更简单的)方法吗

下面是函数

def test_invalid_minimum__traffic_parameters__capacity__min_percentage(self):
    global test_schema

    capacity = test_schema["traffic_parameters"]["capacity"]
    print ("capacity = " + str(capacity))
    print ("-----------------------------------------")

    index0 = capacity["oneOf"][0]
    print ("index0 = " + str(index0))
    print ("-----------------------------------------")

    min_percentage = index0["min_percentage"]
    print ("min_percentage = " + str(min_percentage))

    with self.assertRaises(ValidationError ):
        validate(0, min_percentage)

谢谢。

JSON参考规范没有对
$ref
'd设置任何限制,但实际上,我见过的任何验证器都只支持指向JSON模式的
$ref
's。我不知道为什么没有人支持这个功能,但我还没有看到一个案例,我认为这样做是一个好主意


在最近发布的JSON模式草案-06中,仅支持JSON模式的常见做法成为一条规则。因此,即使你找到了一个支持整型的验证器,我也不建议你使用它,因为它会使将来的升级变得更加困难。

JSON参考规范没有对什么是
$ref
'd设置任何限制,但是在实践中,我见过的任何验证器都只支持指向JSON模式的
$ref
s。我不知道为什么没有人支持这个功能,但我还没有看到一个案例,我认为这样做是一个好主意


在最近发布的JSON模式草案-06中,仅支持JSON模式的常见做法成为一条规则。因此,即使您找到了一个支持整数的验证器,我也不建议您使用它,因为它将使将来的升级更加困难。

这样做行不通<代码>$ref引用必须始终指向架构。所以它可以是一个对象或布尔值,但不能是一个数字。

这样不行<代码>$ref引用必须始终指向架构。所以它可以是一个对象或布尔值,但不是一个数字