2014-11-14 5 views
1

JSON 스키마 문서의 배열 내부 요소에 대한 반복 패턴을 만드는 방법이 있습니까? 쿼리 작성 도구로 생성 된 쿼리의 유효성을 검사하기 위해이 메서드를 사용하고 싶습니다.JSON- 배열 내부의 스키마 패턴 반복

내가 현재 사용하는 스키마의 부분이 나에게 쿼리의 정확한 검증을 할 수 있습니다

"complexCondition": { 
    "anyOf": [ 
     { 
      "title": "Simple condition, e.x. X==0", 
      "type": "string" 
     }, 
     { 
      "type": "array", 
      "items": [ 
       { 
        "$ref": "#/complexCondition" 
       }, 
       { 
        "type": "string", "enum": ["AND","OR"] 
       }, 
       { 
        "$ref": "#/complexCondition" 
       } 
      ], 
      "additionalItems": false 
     } 
    ] 
} 

이다 "conditionA & & 조건 b & & conditionC"그러나

[[conditionA,"AND",conditionB],"AND",conditionC] 

로, 나는 싶습니다 쿼리가 저장되는 문서의 확인 및 유효성 검사 가능

[conditionA,"AND",conditionB,"AND",conditionC] 

및 임의 수의 조건에서이를 달성 할 수 있습니다.

답변

0

의도 한대로하려면 홀수 및 짝수 위치에 대한 규칙을 배열에 정의해야합니다.이 규칙은 json-schema로 길이가 다른 배열에 대해서는 수행 할 수 없습니다.

쿼리 조건의 예상되는 수는 무한히 성장하지 않을 경우, 하드 코딩 할 수 항목 키워드에 처음 n 위치 :

"항목": [{ "$ 심판": "#/조건 ","$ ref ":"#/연산자 "}, {"$ ref ":"#/조건 ", {"$ ref ":"#/연산자 "} ... 등)

이 경우 여전히 "연산자"로 끝나는 잘못된 조건을 정의 할 수있는 문제가 있습니다. 다른 옵션은 "oneOf"를 만들고 각 posibility를 구축하는 것입니다 (스크립트로 자동화 될 수 있지만 100 개의 절이있는 표현은 없을 것입니다 ...)

어쨌든 나는 조금 이상하게 생각합니다. 본질적으로 재귀적인 개념을 평평하게합니다. 어떻게 보관 하시겠습니까 ((OR OR B) OR (C AND B))?

그래서 원하는 직렬화 스키마 형식을 다시 생각해 볼 수 있다면 재귀 적 접근을 제안 할 수 있습니다. 뭔가 같은 :

간단한 조건 :

[["condition1"]] 

간단한 절 :

"predicate" : { 
    "type" : "array", 
    "items" : { 
     "$ref" : "#/clause" 
    } 
} 

"clause" : { 
    "type" : "array", 
    "items" : [{ 
      "$ref" : "#/condition" 
     } 
    ], 
    "additionalItems" : { 
     "type" : "array", 
     "items" : [{ 
       "$ref" : "#/operator" 
      }, { 
       "$ref" : "#/clause" 
      } 
     ] 
    } 
} 

생성 된 문자열이 더 추한이지만, 그것은 간단한 재귀 함수와 매우 쉬울 것이다 분석

[["condition1",["OR",["condition2"]]] 

같은 레벨에 절 추가

[["condition1",["OR",["condition2"]],["OR",["condition3"]]] 

자식 수준

[["condition1",["OR",["condition2"]],["OR",["condition3", ["AND",["condition4"]]]]] 
에 절을 추가