davidschmucker/jsonschemamerger

将多个Json-Schema文件合并成一个。

v0.1.0-alpha2 2021-11-11 11:29 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"
    }
  }
}