Php 如何在JsonValidator中使用引用

Php 如何在JsonValidator中使用引用,php,jsonschema,Php,Jsonschema,有人能告诉我如何使Json模式验证器能够找到引用吗 这是我试图验证的foobar模式: { "title": "foobar schema", "type": "object", "properties": { "pagination": { "$ref": "#/definitions/pagination" } }, "required": ["pagination"] } 分页模式的定义包含在我的计算机上的一个单独的文件中 在不告诉JSO

有人能告诉我如何使Json模式验证器能够找到引用吗

这是我试图验证的foobar模式:

{
  "title": "foobar schema",
  "type": "object",
  "properties": {
    "pagination": {
       "$ref": "#/definitions/pagination"
    }
  },
  "required": ["pagination"]
}
分页模式的定义包含在我的计算机上的一个单独的文件中

在不告诉JSON验证器如何解析如下引用的情况下尝试验证:

$uriRetriever = new JsonSchema\Uri\UriRetriever();
$refResolver = new JsonSchema\RefResolver($uriRetriever, $uriResolver);
$schema = $refResolver->resolve("file://".realpath(__DIR__."/foobar.json"));
给出一条错误消息:

File: file://features/foobar.json is found, but could not resolve fragment: #/definitions/pagination (JsonSchema\Exception\UnresolvableJsonPointerException)
这很公平,因为验证器无法知道如何找到包含分页模式定义的文件……那么我如何告诉RefResolver如何找到分页模式的定义呢


我希望能够通过本地文件系统解析该文件,而不必在Web服务器上使用URL。

模式中使用的引用类型是引用模式文件的另一部分。您需要指定定义/分页属性以消除错误

{
  "title": "foobar schema",
  "type": "object",
  "properties": {
    "pagination": {
       "$ref": "#/definitions/pagination"
    }
  },
  "required": ["pagination"],
  "definitions": {
        "pagination": {

        }
    }
}
为了引用其他文件中的定义,您可以编写如下内容:

"pagination": {
  "$ref": "pagination.schema.json#"
}
甚至在外部文件中指定特定节点:

"pagination": {
  "$ref": "external_definitions.schema.json#/definitions/pagination"
}
external_definitions.schema.json
/
pagination.schema.json
应与包含引用的架构在同一文件夹中查找。库还应该提供一些api来配置此查找

在我的项目中,我使用php的JsonValidator。它不允许提供自定义解析程序,但搜索引用文件的位置可能会受到模式中“id”值的影响

例如,
main.schema.json
中的模式:

{
  "id": "http://myweb.com/schemas/main.schema.json#",
  "title": "foobar schema",
  "type": "object",
  "properties": {
    "pagination": {
       "$ref": "pagination.schema.json#"
    }
  },
  "required": ["pagination"]
}
验证此架构时,验证程序会尝试使用以下方式加载pagination.schema.json:

php_get_contents('http://myweb.com/schemas/pagination.schema.json');

这真的能帮你吗?我需要一个代码示例,演示如何告诉库在特定文件中可以找到类似“#/definitions/diskDevice”的内容。