2017-03-01 2 views
1

주제가 상당히 혼란 스럽습니다. 그렇지 않습니까?Standard-JsonSchema가 Standard-JsonSchema를 따르지 않습니다.

"JsonSchema-Validation"을 이해하는 한 "Json-schema.org/schema#"아래에 다른 JsonSchemas에 대해 허용 된 구조를 정의해야하는 표준 JsonSchema가 있습니다. "json-schema.org/schema#"에있는이 표준 JsonSchema는 (다른 JsonSchema와 마찬가지로) JsonFile 자체이며 JsonSchema이기도합니다.

내 혼란스러운 점 : 이 특정 표준 JsonSchema에 대한 유효성을 검사 할 때 JsonNodes/JsonObject-PropertyKeys "additionalProperties"에서 오류가 발생합니다.

"json-schema.org/example2.html"에서 설명한대로 PropertyKeys "additionalProperties"는 PropertyKeys "속성"과 동일한 수준에 있어야합니다. 그러나 표준 JsonSchema에서는 그렇지 않습니다. 그들은 Propertykey "properties"에 포함 된 JsonObject 내부에 있습니다.

무엇이 잘못 되었나요?

두 번째 문제 : 참조 항목 "$ ref"는 무엇입니까? "#" 은 무엇을 의미합니까? 어떤 정의 항목이 참조합니까? "$ 심판": 일반적인 참조 항목이 더 좋아 보일 것 "#/정의/positiveInteger의"어떤 도움에 감사드립니다

. 종류

는 HuDeanY

답변

2

이의이 상황이 좀 더 명확하게하기 위해 약간 아래로 스키마를 중단하자 간주한다. 내가 너를 올바르게 이해한다면, 너를 넘어 뜨리는 부분이다.

{ 
    ... 
    "properties": { 
    ... 
    "properties": { 
     "type": "object", 
     "additionalProperties": { "$ref": "#" }, 
     "default": {} 
    }, 
    ... 
    }, 
} 

까다로운 부분은 두 번째 '속성'이 키워드가 아니라는 사실을 인식해야한다는 것입니다. 속성 이름입니다. 이것은 properties 키워드를 정의하는 메타 스키마입니다. 따라서 properties 키워드 안에 additionalProperties 키워드가 중첩되어있는 것은 아니므로 처음 보이는 것처럼 보일 수 있습니다.


"#"은 문서의 루트를 나타냅니다. 따라서 { "$ref": "#" }은 재귀적인 참조입니다. 즉, "#"은 전체 메타 스키마에 대한 참조입니다. 위의 스키마 세그먼트는 값이 스키마 인 개체로 properties 키워드를 정의합니다.


마지막으로, 나는 어떤 제대로 작동 검증이 성공적으로 메타 스키마에 대해 (메타 스키마 자체를 포함하여) 모든 유효한 스키마의 타당성을 검증하도록 말씀 드릴 수 있습니다. 유효하지 않으면 유효성 검사기의 버그이며 사용중인 유효성 검사 라이브러리의 관리자에게보고해야합니다.