2017-01-24 2 views
0

У меня есть json-схема, представляющая геометрию как Point или MultiPoint. Каждый определяется в схеме в «Определения»:Как ссылаться на определение схемы json из другой схемы

{ 
    "$schema": "http://json-schema.org/draft-04/schema#", 
    "id": "http://schema.my-site.org/geometry.json#", 
    "type": "object", 
    "oneOf": [ 
     { 
      "allOf": [ 
       { 
        "required": [ 
         "type", 
         "coordinates" 
        ] 
       }, 
       { 
        "oneOf": [ 
         { 
          "$ref": "#/definitions/Point" 
         }, 
         { 
          "$ref": "#/definitions/MultiPoint" 
         } 
        ] 
       } 
      ] 
     } 
    ], 
    "definitions": { 
     "Point": { 
      "title": "Point", 
      "type": "object", 
      "properties": { 
       "type": { 
        "enum": [ 
         "Point" 
        ] 
       }, 
       "coordinates": { 
        "$ref": "#/definitions/position" 
       } 
      } 
     }, 
     "MultiPoint": { 
      "title": "MultiPoint", 
      "type": "object", 
      "properties": { 
       "type": { 
        "enum": [ 
         "MultiPoint" 
        ] 
       }, 
       "coordinates": { 
        "$ref": "#/definitions/positionArray" 
       } 
      } 
     }, 
     "position": { 
      "type": "array", 
      "minItems": 2, 
      "maxItems": 2, 
      "additionalItems": false, 
      "items": [ 
       { 
        "type": "number" 
       }, 
       { 
        "type": "number" 
       } 
      ] 
     }, 
     "positionArray": { 
      "type": "array", 
      "items": { 
       "$ref": "#/definitions/position" 
      } 
     } 
    } 
} 

Теперь я хочу сделать еще одну схему, которая использует определение точки. В настоящее время я копировал описания для Point и position в свойствах «startPosition» и «endPosition», и он работает. Но есть ли способ, как просто ссылаться на определение точки из моей схемы geometry.json?

примечание: Я только хочу разрешить использование Точки здесь, но не MultiPoint - геометрия.

{ 
    "$schema": "http://json-schema.org/draft-04/schema#", 
    "id": "http://schema.my-site.org/myitem.json#", 
    "type": "object", 
    "additionalProperties": false, 
    "required": [ 
     "myproperty" 
    ], 
    "properties": { 
     "myproperty": { 
      "type": "array", 
      "minItems": 0, 
      "items": { 
       "type": "object", 
       "additionalProperties": false, 
       "properties": { 
        "id": { 
         "type": "string" 
        }, 
        "startPosition": { 
         "geometry": { 
          "required": [ 
           "type", 
           "coordinates" 
          ], 
          "title": "Point", 
          "type": "object", 
          "properties": { 
           "type": { 
            "enum": [ 
             "Point" 
            ] 
           }, 
           "coordinates": { 
            "type": "array", 
            "minItems": 2, 
            "maxItems": 2, 
            "additionalItems": false, 
            "items": [ 
             { 
              "type": "number" 
             }, 
             { 
              "type": "number" 
             } 
            ] 
           } 
          } 
         } 
        }, 
        "endPosition": { 
         "geometry": { 
          "required": [ 
           "type", 
           "coordinates" 
          ], 
          "title": "Point", 
          "type": "object", 
          "properties": { 
           "type": { 
            "enum": [ 
             "Point" 
            ] 
           }, 
           "coordinates": { 
            "type": "array", 
            "minItems": 2, 
            "maxItems": 2, 
            "additionalItems": false, 
            "items": [ 
             { 
              "type": "number" 
             }, 
             { 
              "type": "number" 
             } 
            ] 
           } 
          } 
         } 
        } 
       } 
      } 
     } 
    } 
} 

ответ

0

не проверял сам, но, по словам this, вы можете использовать JSON pointers:

В файле geometry.json:

{ 
    "$schema": "http://json-schema.org/draft-04/schema#", 
    "id": "http://schema.my-site.org/geometry.json", 
    "type": "object", 
    "definitions": { 
     "Point": { ...}, 
     "MultiPoint": {...} 
    } 
} 

В файле myitem.json:

{ 
    "$schema": "http://json-schema.org/draft-04/schema#", 
    "id": "http://schema.my-site.org/myitem.json#", 
    "type": "object", 
    "properties": { 
     "point": { 
      "$ref": "http://schema.my-site.org/geometry.json#definitions/Point" 
     } 
    } 
} 
Смежные вопросы