$ref 사용에 관한 JSON 스키마
$ref는 URI를 json 스키마로 가져가서 사용하는 것으로 알고 있습니다만, $ref : "#"은 어디를 가리키는 것입니까?이 블록 레벨에 대해 현재 스키마를 사용한다는 의미입니까?아니면 루트 레벨 ID에 정의된 루트레벨 스키마를 사용한다는 뜻인가요?감사해요.
편집: 다음 항목이 있는 경우:
"items": {
"anyOf": [
{ "$ref": "#" },
{ "$ref": "#/definitions/schemaArray" }
],
"default": {}
}
id 필드가 없기 때문에 먼저 루트 스키마를 사용하여 인스턴스 항목의 유효성을 검사하고 실패하면 정의 스키마에 정의된 schemaArray 스키마를 사용하여 유효성을 검사합니다.
이 설정을 다음과 같이 변경할 경우:
"items": {
"id" : "#/items",
"anyOf": [
{ "$ref": "#" },
{ "$ref": "#/definitions/schemaArray" }
],
"default": {}
}
그러면 배열의 첫 번째 서브헤마는 항목 스키마 자체를 가리킵니다.
편집 #2: 그럼 다음 조건을 충족하면:
"items": {
"id" : "itemSchema",
"anyOf": [
{ "$ref": "#" },
{ "$ref": "#/definitions/schemaArray" }
],
"default": {}
}
그리고.
"stringArray": {
"type": "array",
"items": { "$ref" : "itemSchema" },
"minItems": 1,
"uniqueItems": true
}
"string Array"의 "items" 필드는 위의 "itemsSchema"에 대해 검증됩니다.
또한 'anyOf'의 두 번째 $ref는 루트로 이동한 후 해당 스키마에 도달할 때까지 경로를 통과하여 작동합니까?감사합니다!
OK: 각$ref
완전한 URI로 해결됩니다.이 작업이 완료되면 다음과 같은 질문을 통해 모든 질문에 답변할 수 있습니다.단순히 URI를 가져오면 어떤 스키마를 갖게 됩니까?어디서?$ref
로딩 방법, 이 모든 것은 관련이 없습니다.해결된 URI에 전적으로 의존합니다.
라이브러리는 문서를 한 번만 가져오도록 캐싱하거나 다른 스키마를 "대화"하도록 한 스키마를 신뢰하는 것과 같은 몇 가지 바로 가기를 사용할 수 있지만, 모두 구현 세부 정보입니다.
첫 번째 질문에 대한 답변:
#
특별한 것은 아닙니다.$ref
현재 문서(또는 가장 가까운 값)에 대한 URI로 해결됩니다."id"
(있는 경우).
따라서 사용하지 않은 경우"id"
,그리고나서#
스키마 문서의 루트를 가리킵니다.에서 스키마를 가져온 경우http://example.com/schema
, 그 후 a.{"$ref": "#"}
해결할 수 있는 내부 어디든지http://example.com/schema#
문서 그 자체입니다.
사용할 때 다릅니다."id"
그 이유는 이 명령어가 '기본' 스키마를 변경하기 때문입니다.$ref
해결되었습니다.
{
"type": "array",
"items": {
"id": "http://example.com/item-schema",
"type": "object",
"additionalProperties": {"$ref": "#"}
}
}
이 예에서는$ref
로 해결하다.http://example.com/item-schema#
JSON Schema 셋업이 이미 가지고 있는 스키마를 신뢰하는 경우 "항목"의 값을 다시 사용할 수 있습니다.
하지만 요점은 에 대해 특별한 것이 없다는 것이다.#
- 다른 URI와 마찬가지로 해결됩니다.
EDIT 1에 대한 응답:
첫 번째 예가 맞습니다.
하지만 두 번째는 아쉽게도 그렇지 않아요이는 URI에 대해 fragment 해결이 기능하기 때문입니다.즉, 1개의 fragment가 다른 fragment를 완전히 대체합니다.이 문제를 해결하면#
"id"
의 의 값#/items
것이 아닙니다.#/items
- - 하다 - 하다#
에서는 의 첫 "anyOf"
는 첫 번째 예시와 같이 문서의 루트로 계속 해결됩니다.
EDIT 2에 대한 응답:
가 합니다.http://example.com/my-schema
의 URI 풀 , 2개의 URI 풀 URI.$ref
s:
http://example.com/itemSchema#
http://example.com/itemSchema#/definitions/schemaArray
첫 번째 예에서는 라이브러리가 이미 가지고 있는 스키마를 사용할 수 있지만 URI를 보면 그렇지 않을 수 있습니다.http://example.com/my-schema
정확한 표현은 신뢰받지 못할 수 있다http://example.com/itemSchema
.
itemSchema', 'itemSchema'가 안요."definitions"
", ", "로 $ref
전혀 문제가 해결되지 않습니다.
언급URL : https://stackoverflow.com/questions/17595377/json-schema-regarding-use-of-ref
'programing' 카테고리의 다른 글
Sublime Text 3에서 JSX 파일에 대해 Emet을 활성화하려면 어떻게 해야 합니까? (0) | 2023.03.29 |
---|---|
js 스크립트 파일의 WordPress 경로 URL (0) | 2023.03.29 |
녹아웃 기능이 있는 TypeScriptJS (0) | 2023.03.29 |
각도 테스트 방법JS 디렉티브 (0) | 2023.03.29 |
헤더 값: application/vnd.api+json (0) | 2023.03.29 |