2016-11-22 1 views
1

일부 개체의 필드 값이 동일한 문서의 다른 개체에 정의 된 열거 형에 대해 유효성을 검사해야하는 문서의 json 스키마를 만들려고합니다.다른 개체의 내용에 대해 개체 값의 유효성을 검사하는 Json 스키마

구체적으로, 아래 예제에서 idvalues으로 속성을 정의하고 싶습니다. 다른 json 파일에서 다른 속성을 정의 할 수 있어야합니다. 그런 다음 "개체"는 object.properties[i].id이 속성 중 하나의 id와 일치해야하며 object.properties[i].value은 해당 속성에 대해 정의 된 enum 값 중 하나와 일치해야합니다.

{ 
    "properties": [ 
     { 
      "id": "SIZE", 
      "values": ["small", "medium", "big"] 
     }, 
     { 
      "id": "MATERIAL", 
      "values": ["wood", "glass", "steel", "plastic"] 
     }, 
     { 
      "id": "COLOR", 
      "values": ["red", "green", "blue"] 
     } 
    ], 

    "objects": [ 
     { 
      "name": "chair", 
      "properties": [ 
       { 
        "id": "SIZE", 
        "value": "small" 
       }, 
       { 
        "id": "COLOR", 
        "value": "red" 
       } 
      ], 
     }, 
     { 
      "name": "table", 
      "properties": [ 
       { 
        "id": "MATERIAL", 
        "value": "wood" 
       } 
      ] 
     } 
    ] 
} 

는 I는 구조를 검증 JSON 스키마를 생성하도록했지만, "등록"객체 내부 필드를 참조로 설명 막혔다. 또한 standard을 살펴본 결과 목표를 달성 할 방법을 찾지 못했습니다.

내 json 파일의 유효성을 검사하는 json 스키마를 만들 수 있습니까?

답변

1

간접 지정의 한 수준을 제거하기 위해 데이터 구조를 조금 변경하면 거의 수행 할 수있는 제안이 있습니다 ($data reference). 그것은이다 supported in Ajv (나는 저자이다).

데이터가 있었다 그래서 경우 :

{ 
    "properties": { 
     "SIZE": ["small", "medium", "big"], 
     "MATERIAL": ["wood", "glass", "steel", "plastic"], 
     "COLOR": ["red", "green", "blue"] 
    }, 
    "objects": { 
     "chair": { 
      "SIZE": "small", 
      "COLOR": "red" 
     }, 
     "table": { 
      "MATERIAL": "wood" 
     } 
    } 
} 

다음 스키마 수 있었다 :

{ 
    "type": "object", 
    "properties": { 
     "properties": { 
      "type": "object", 
      "additionalProperties": { 
       "type": "array", 
       "items": { "type": "string" } 
      } 
     }, 
     "objects": { 
      "type": "object", 
      "additionalProperties": { 
       "type": "object", 
       "properties": { 
        "SIZE": {"enum": {"$data": "3/properties/SIZE"}}, 
        "MATERIAL": {"enum": {"$data": "3/properties/MATERIAL"}}, 
        "COLOR": {"enum": {"$data": "3/properties/MATERIAL"}} 
       } 
      } 
     } 
    } 
} 

그리고 동적 가능한 모든 속성 목록을 기반으로 생성 할 수있다.

데이터 구조를 사용하면 유효성 검사기가 JSON 스키마 외부에서 유효성 검사 논리를 지원하거나 구현하는 경우 사용자 지정 키워드를 사용할 수 있습니다.

+0

감사합니다. json 스키마 v4를 사용할 수 없다는 의미입니까? 누군가가 그것에 대해 노력하고 있다는 것을 알고 있습니다! – Mikhail

+0

v4로 수정 가능합니다. – esp

+0

실제로 $ 데이터를 사용하더라도 간접 지정 수준을 낮추면 부분적으로 만 가능합니다. 나는 편집 할 것이다. – esp