如何用Ajv验证LD+JSON中@mainEntity数组的多个FAQ条目?
如何修改FAQ Schema以支持验证@mainEntity数组中的多个问答条目
完全可行,只需要调整Schema中@mainEntity字段的类型定义,从单个对象改为数组,并指定数组元素需符合问答条目的结构规则。
修改步骤示例:
假设你当前的FAQ Schema中@mainEntity是这样定义的:
{ "$schema": "http://json-schema.org/draft-07/schema#", "type": "object", "properties": { "@context": { "const": "https://schema.org" }, "@type": { "const": "FAQPage" }, "mainEntity": { "type": "object", "properties": { "@type": { "const": "Question" }, "name": { "type": "string" }, "acceptedAnswer": { "type": "object", "properties": { "@type": { "const": "Answer" }, "text": { "type": "string" } }, "required": ["@type", "text"] } }, "required": ["@type", "name", "acceptedAnswer"] } }, "required": ["@context", "@type", "mainEntity"] }
只需要把mainEntity的类型从object改为array,并通过items字段指向原有的问答条目结构:
{ "$schema": "http://json-schema.org/draft-07/schema#", "type": "object", "properties": { "@context": { "const": "https://schema.org" }, "@type": { "const": "FAQPage" }, "mainEntity": { "type": "array", "items": { "type": "object", "properties": { "@type": { "const": "Question" }, "name": { "type": "string" }, "acceptedAnswer": { "type": "object", "properties": { "@type": { "const": "Answer" }, "text": { "type": "string" } }, "required": ["@type", "text"] } }, "required": ["@type", "name", "acceptedAnswer"] }, "minItems": 1 // 可选:限制数组至少有一个问答条目 } }, "required": ["@context", "@type", "mainEntity"] }
验证逻辑说明:
修改后,Ajv会自动遍历@mainEntity数组中的每个元素,检查是否符合items中定义的问答条目规则。只要数组里的每个条目都包含必填字段、类型正确,就能通过验证;如果有任何一个条目不符合规则,Ajv会返回对应的错误信息。
你还可以根据需求添加minItems(最小条目数)、maxItems(最大条目数)等关键字,进一步约束数组的长度。
内容的提问来源于stack exchange,提问作者koji
相关产品推荐
相关产品推荐

