2016-12-13 2 views
0

경로에 하나 jsonschema를 연결할 수있는 것은 내가 E:\JSONSchema\Core\visuals.json에 위치한 다른 파일에 위의 jsonschema을 재사용 할 E:\JSONSchema\Files\details.json어떻게 우리가 파일의 또 다른 jsonschema

{ 
    "type": "array", 
    "items": { 
    "type": "object", 
    "properties": { 
     "id": { 
     "type": "string" 
     }, 
     "tagid": { 
     "type": "string" 
     } 
    }, 
    "required": [ 
     "id", 
     "tagid" 
    ], 
    "additionalProperties": false 
    } 
} 

입니다. 그것을 성취하기 위해 어떻게 진행할 수 있습니까?

+0

질문과 별도로 예제 스키마에 오류가 있습니다. "필수"속성이 "속성"목록의 요소로 나타나기 때문에 스키마가 유효하지 않습니다. "required"는 스키마 객체의 최상위 속성 인 "속성"을 가진 형제 수준이어야합니다. 질문에 대한 수정 사항을 제출했으며 방금 승인되었습니다. JSON Schema Lint에서 볼 수있는 요지는 다음과 같습니다. http://jsonschemalint.com/#/version/draft-05/markup/json?gist=8a3c1b3b0264899879c1fecab6ba8ed4 –

답변

0

사용 $ref과 값

예로 절대 경로를 제공

파일 경로 : E:\JSONSchema\Files\details.json

{ 
    "$schema": "http://json-schema.org/draft-04/schema#", 
    "reuse": { 
    "type": "array", 
    "items": { 
     "type": "object", 
     "properties": { 
     "id": { 
      "type": "string" 
     }, 
     "tagid": { 
      "type": "string" 
     } 
     }, 
     "required": [ 
     "id", 
     "tagid" 
     ], 
     "additionalProperties": false 
    } 
    } 
} 
(210)

내가 다른 파일에 다시 사용하려는 경우 샘플 코드이 달성의 또 다른 방법은 id을 사용하는 것입니다

{ 
    "$schema": "http://json-schema.org/draft-04/schema#", 
    "type": "object", 
    "properties": { 
    "firstName": { 
     "type": "string" 
    }, 
    "lastName": { 
     "type": "string" 
    }, 
    "IDs": { 
     "$ref": "file:/E:/JSONSchema/Files/details.json#/reuse" 
    } 
    } 
} 

처럼 보일 것입니다. 다음 코드를 확인하십시오.

{ 
     "$schema": "http://json-schema.org/draft-04/schema#", 
     "id": "file:/E:/JSONSchema/Files/details.json", 
     "type": "object", 
     "properties": { 
     "firstName": { 
      "type": "string" 
     }, 
     "lastName": { 
      "type": "string" 
     }, 
     "IDs": { 
      "$ref": "#/reuse" 
     } 
     } 
    } 
+0

'$ ref'는'#/reuse'를 가리키고 있습니다. '# '다음의 모든 것은 문서 내의 JSON 포인터입니다. 앞의 파일 참조없이 해시 조각을 포함 시켰으므로 _current_ 스키마의 루트 개체에서'reuse' 요소를 찾습니다. 외부 스키마에서'reuse'를 참조하려면 해당 스키마를 가리키는 URI와 해쉬 기호 및 JSON 포인터를 포함시켜야합니다. –

0

JSON 스키마를 사용하면 스키마 개체가 예상되는 모든 곳에서 $ref 속성이 단일 인 개체를 사용하여 외부에서 정의 된 스키마를 참조 할 수 있습니다. 스펙의 관련 섹션은 here입니다 :

하위 스키마가 예상되는 모든 시간, 스키마 대신 "$ 심판"속성을 포함하는 객체 를 사용할 수 있습니다. $ ref의 값은 URI Reference입니다. 현재 URI 기반을 기준으로 해결되면 사용할 스키마의 URI 인 을 식별합니다. "$ ref"객체의 다른 모든 속성은 무시해야합니다 ( ).

그래서 예를 따라,이 e:\JSONSchema\Core\visuals.json의 내용으로 작동합니다 :

{ 
    "type": "object", 
    "properties": { 
    "firstName": { 
     "type": "string" 
    }, 
    "lastName": { 
     "type": "string" 
    }, 
    "IDs": { 
     "$ref": "../files/details.json" 
    } 
    } 
} 
+0

편집 및 답변 주셔서 감사합니다. 하지만, 당신의 솔루션을 시도했을 때 나는'URI is Absolute '와 같은 에러를 보았습니다. 그래서, 절대 경로를 제공하려고했습니다. 대답을 확인하고 내가 틀렸다면 알려주십시오. – KC7

+0

상대 URI가 작동해야한다고 생각합니다. 그러나 테스트 환경이 좋지 않습니다 (자체 테스트 하네스 작성 이외). 시험에 당신은 무엇을 사용하고 있습니까? –

+0

'java' 환경에서'jackson' API를 사용하여 테스트 중입니다 – KC7