davidschmucker / jsonschemamerger
将多个Json-Schema文件合并成一个。
v0.1.0-alpha2
2021-11-11 11:29 UTC
Requires
- php: >=8
Requires (Dev)
- kint-php/kint: ^3.3
- phpunit/phpunit: ^9.5
This package is not auto-updated.
Last update: 2024-09-27 00:26:17 UTC
README
将JsonSchema内部的引用合并为一个完整的Schema。
特性
可用
- 合并内部子Schema引用
- 合并内部捆绑引用
进行中
- 合并外部捆绑引用
计划中
- 合并默认文件引用
- 合并相对引用
- 合并绝对引用
用法
Json字符串
$jsonString = '{"$schema":"https://json-schema.fullstack.org.cn/draft/2020-12/schema","$id":...';
$schema = new JsonSchemaImpl($jsonString);
$jsonSchemaMerger = new JsonSchemaMergerImpl($schema, new JsonSchemaFactory());
$mergedSchema = $jsonSchemaMerger->getMergedSchema();
var_dump($mergedSchema->getSchemaString());
var_dump($mergedSchema->getSchemaArray());
var_dump($mergedSchema->getSchemaObject());
Json文件
$fh = new FileHandlerImpl('/my/json/file.json');
$schema = new JsonSchemaImpl($fh->getContent());
$jsonSchemaMerger = new JsonSchemaMergerImpl($schema, new JsonSchemaFactory());
$mergedSchema = $jsonSchemaMerger->getMergedSchema();
var_dump($mergedSchema->getSchemaString());
var_dump($mergedSchema->getSchemaArray());
var_dump($mergedSchema->getSchemaObject());
说明
内部子Schema引用
合并引用前的示例Json-Schema
{
"$schema": "https://json-schema.fullstack.org.cn/draft/2020-12/schema",
"$id": "ns://davidschmucker/jsonschemamerger/Testfiles/testStartFile",
"title": "Start File Test Schema",
"description": "Json Schema for Testing JsonSchema Merger",
"type": "object",
"properties": {
"internalSubSchemaRef": {"$ref": "#/$defs/internalSubSchemaRefExample"}
},
"$defs": {
"internalSubSchemaRefExample": {
"type": "object",
"properties": {
"subreference": {"$ref": "#/$defs/subreferenceExample"}
}
},
"subreferenceExample": {
"type": "string"
}
}
}
合并引用后的示例Json-Schema
{
"$schema": "https://json-schema.fullstack.org.cn/draft/2020-12/schema",
"$id": "ns://davidschmucker/jsonschemamerger/Testfiles/testStartFile",
"title": "Start File Test Schema",
"description": "Json Schema for Testing JsonSchema Merger",
"type": "object",
"properties": {
"internalSubSchemaRef": {
"type": "object",
"properties": {
"subreference": {
"type": "string"
}
}
}
},
"$defs": {
"internalSubSchemaRefExample": {
"type": "object",
"properties": {
"subreference": {"$ref": "#/$defs/subreferenceExample"}
}
},
"subreferenceExample": {
"type": "string"
}
}
}
内部捆绑引用
合并引用前的示例Json-Schema
{
"$schema": "https://json-schema.fullstack.org.cn/draft/2020-12/schema",
"$id": "ns://davidschmucker/jsonschemamerger/Testfiles/testStartFile",
"title": "Start File Test Schema",
"description": "Json Schema for Testing JsonSchema Merger",
"type": "object",
"properties": {
"bundledRef": {"$ref": "/jsonschemamerger/Testfiles/bundleRef"}
},
"$defs": {
"bundleRefExample": {
"$schema": "https://json-schema.fullstack.org.cn/draft/2020-12/schema",
"$id": "/jsonschemamerger/Testfiles/bundleRef",
"type": "object",
"properties": {
"bundleReference": {"$ref": "/jsonschemamerger/Testfiles/bundleExample"}
}
},
"bundleExample": {
"$schema": "https://json-schema.fullstack.org.cn/draft/2020-12/schema",
"$id": "/jsonschemamerger/Testfiles/bundleExample",
"type": "string"
}
}
}
合并引用后的示例Json-Schema
{
"$schema": "https://json-schema.fullstack.org.cn/draft/2020-12/schema",
"$id": "ns://davidschmucker/jsonschemamerger/Testfiles/testStartFile",
"title": "Start File Test Schema",
"description": "Json Schema for Testing JsonSchema Merger",
"type": "object",
"properties": {
"bundledRef": {
"type": "object",
"properties": {
"bundleReference": {
"type": "string"
}
}
}
},
"$defs": {
"bundleRefExample": {
"$schema": "https://json-schema.fullstack.org.cn/draft/2020-12/schema",
"$id": "/jsonschemamerger/Testfiles/bundleRef",
"type": "object",
"properties": {
"bundleReference": {"$ref": "/jsonschemamerger/Testfiles/bundleExample"}
}
},
"bundleExample": {
"$schema": "https://json-schema.fullstack.org.cn/draft/2020-12/schema",
"$id": "/jsonschemamerger/Testfiles/bundleExample",
"type": "string"
}
}
}