在json模式文件中使用$ ref

时间:2018-02-13 12:30:33

标签: rest mule raml

我有一个名为schema的文件夹,其中包含employee.schema文件。

在下面的代码片段中,address属性是一个数组类型。

我想将address.schema文件保存在employee.schema所在的同一文件夹中,并在employee.schema中引用它

这是否可以使用draft-03架构?

{
  "type":"object",
  "$schema": "http://json-schema.org/draft-03/schema",
  "properties":{
        "empId":{
            "type":"integer",
            "required":false
         },
         "empName":{
            "type":"string",
            "required":true,
            "minLength":10,
            "maxLength":20
         },
         "contactno":{
            "type":"string",
            "required":true,
            "minLength":10,
            "maxLength":10
          },
          "salary":{
            "type":"integer",
            "required":true
          },
          "address":{
            "type":"array",
             "items":{
                "type": "object",
                 "properties": {
                    "city":{
                        "type":"string",
                        "required":true
                        },
                    "pincode":{
                        "type":"string",
                        "required":true
                     }
                 }  
            }
          }
   }
}

1 个答案:

答案 0 :(得分:0)

我认为草案03规范说明了一切:

  

此属性定义包含完整
的架构的URI   此架构的表示。当验证者遇到这个时   属性,它应该用模式替换当前模式   由值的URI引用(如果已知且可用)并且重新加上   验证实例。此URI可以是相对的或绝对的,并且
  相对URI应该根据当前的URI来解析   架构。

https://tools.ietf.org/search/draft-zyp-json-schema-03#section-5.28

只需定义"地址"作为" $ ref"指向其他架构。

{
  "type": "object",
  "$schema": "http://json-schema.org/draft-03/schema",
  "properties": {
    "empId": {
      "type": "integer",
      "required": false
    },
    "empName": {
      "type": "string",
      "required": true,
      "minLength": 10,
      "maxLength": 20
    },
    "contactno": {
      "type": "string",
      "required": true,
      "minLength": 10,
      "maxLength": 10
    },
    "salary": {
      "type": "integer",
      "required": true
    },
    "address": {
      "$ref": "address.schema"
    }
  }
}

然后" address.schema"看起来像这样:

{
  "type":"array",
  "$schema": "http://json-schema.org/draft-03/schema",       
   "items": {
      "type": "object",
       "properties": {
          "city": {
            "type":"string",
            "required":true
          },
          "pincode": {
            "type":"string",
            "required":true
          }
       }
    }
}