我想用JavaScript中的Ajv针对JSON模式验证JSON。我收到错误消息:
抛出新的it.MissingRefError(it.baseId,$ schema,$ message); ^ 错误:无法从id requestGetGraphs解析引用#/ definitions / requestGraph
在删除对其他架构的引用时: {“ $ ref”:“#/ definitions / requestGraph”} 错误消失了。
JavaScript代码:
ajv.addSchema(require('./json-schema/graph-response'), 'graph-response.json');
ajv.validate('requestGetGraphs', `{"type" : "requestGetGraphs", "space" : "config", "v" : 1.1, "id" : "dsaf" }`);
graph-request.json:
{
"$schema": "http://json-schema.org/draft-07/schema#",
"$id" : "graph-requests.json",
"definitions": {
"requestGraph" : {
"$id" : "#/definitions/requestGraph",
"allOf" : [
{ "$ref" : "call.json/#/definitions/request" },
{
"properties": {
"space": {
"$id" : "#requestGraph/properties/space",
"type": "string",
"const": "config"
}
}
}
]
}
},
"requestGetGraphs" : {
"$id" : "requestGetGraphs",
"type" : "object",
"allOf" : [
{
"properties": {
"action": {
"$id" : "#requestGetGraphs/properties/action",
"type": "string",
"const": "requestGetGraphs"
}
}
},
{ "$ref" : "#/definitions/requestGraph" }
]
}
}
答案 0 :(得分:1)
这与URI解析有关。 选中https://tools.ietf.org/html/draft-handrews-json-schema-01#section-8.2.2
当“ $ id”设置基本URI时,包含该“ $ id”的对象和 可以使用JSON指针识别其所有子方案
从该位置开始的片段。即使是
也是如此 进一步更改基本URI的子方案。因此,一个
子模式可以通过多个URI访问,每个URI都由 在子模式或父级中声明的URI,以及JSON指针
片段,用于标识来自声明的架构对象的路径
被识别的子模式的基础。例如
如第8.2.4节所述。
因为您指定的tf.reset_default_graph()
num_inputs=501
num_hid1=250
num_hid2=100
num_hid3=50
num_hid4=num_hid2
num_hid5=num_hid1
num_output=num_inputs
lr=0.01
actf=tf.nn.tanh
output = np.random.rand(100,num_inputs)
X=tf.placeholder(tf.float32,shape=[None,num_inputs])
initializer=tf.variance_scaling_initializer()
w1=tf.Variable(initializer([num_inputs,num_hid1]),dtype=tf.float32)
w2=tf.Variable(initializer([num_hid1,num_hid2]),dtype=tf.float32)
w3=tf.Variable(initializer([num_hid2,num_hid3]),dtype=tf.float32)
w4=tf.Variable(initializer([num_hid3,num_hid4]),dtype=tf.float32)
w5=tf.Variable(initializer([num_hid4,num_hid5]),dtype=tf.float32)
w6=tf.Variable(initializer([num_hid5,num_output]),dtype=tf.float32)
b1=tf.Variable(tf.zeros(num_hid1))
b2=tf.Variable(tf.zeros(num_hid2))
b3=tf.Variable(tf.zeros(num_hid3))
b4=tf.Variable(tf.zeros(num_hid4))
b5=tf.Variable(tf.zeros(num_hid5))
b6=tf.Variable(tf.zeros(num_output))
hid_layer1=actf(tf.matmul(X,w1)+b1)
hid_layer2=actf(tf.matmul(hid_layer1,w2)+b2)
hid_layer3=actf(tf.matmul(hid_layer2,w3)+b3)
hid_layer4=actf(tf.matmul(hid_layer3,w4)+b4)
hid_layer5=actf(tf.matmul(hid_layer4,w5)+b5)
output_layer=tf.matmul(hid_layer5,w6)+b6
saver = tf.train.Saver()
with tf.Session() as sess:
saver.restore(sess, 'my_test_model')
print("Model restored.")
x = sess.run(hid_layer3, feed_dict={X:output})
assert x.shape[1] == hid_layer3.shape[1]
前面没有哈希,所以它的解析就像是一个新的架构(因为它不是片段)。在$ id前面加一个散列前缀表示它是一个片段标识符,并相应地进行URI解析。
您可能还打算将requestGetGraphs
嵌套在requestGetGraphs
里面,对吗?