使用Liquid Studio转换XSD至JSON Schema时非必填字段被误设为必填
XSD转JSON Schema时Liquid Studio错误将minOccurs=0的元素标记为必填
我在用Liquid Studio把XSD转换为JSON Schema时遇到了问题:XSD中设置minOccurs="0"的非必填元素,转换后的JSON Schema里被错误标记为必填字段。
原始XSD代码
<?xml version="1.0" encoding="utf-8" ?> <!--Created with Liquid Studio (https://www.liquid-technologies.com)--> <xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element id="T01" name="Test"> <xs:complexType> <xs:sequence> <xs:element id="T02" name="Form" maxOccurs="40"> <xs:complexType> <xs:sequence> <xs:element id="T03" name="Numbers" minOccurs="0" maxOccurs="500"> <xs:complexType> <xs:sequence> <xs:element id="N01" name="Attr1" minOccurs="0" /> <xs:element id="N02" name="Attr2" minOccurs="0" /> <xs:element id="N03" name="Attr3" minOccurs="0"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:minLength value="1" /> </xs:restriction> </xs:simpleType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> <xs:element id="T04" name="List"> <xs:complexType> <xs:sequence> <xs:element name="Attr1" id="L01"/> <xs:element name="Attr2" id="L02"/> <xs:element name="Attr3" id="L03" minOccurs="0" maxOccurs="2"/> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:schema>
Liquid Studio输出的JSON Schema
{ "$schema": "https://json-schema.org/draft/2020-12/schema", "type": "object", "properties": { "Test": { "$ref": "#/$defs/Test" } }, "additionalProperties": false, "required": [ "Test" ], "$defs": { "Test": { "type": "object", "properties": { "Form": { "type": "array", "maxItems": 40, "minItems": 1, "items": { "type": "object", "properties": { "Numbers": { "type": "array", "maxItems": 500, "items": { "type": "object", "properties": { "Attr1": { "type": "object", "additionalProperties": false }, "Attr2": { "type": "object", "additionalProperties": false }, "Attr3": { "type": "string", "minLength": 1 } }, "additionalProperties": false } }, "List": { "type": "object", "properties": { "Attr1": { "type": "object", "additionalProperties": false }, "Attr2": { "type": "object", "additionalProperties": false }, "Attr3": { "type": "array", "maxItems": 2, "items": { "type": "object", "additionalProperties": false } } }, "additionalProperties": false, "required": [ "Attr1", "Attr2", "Attr3" ] } }, "additionalProperties": false, "required": [ "Numbers", "List" ] } } }, "additionalProperties": false, "required": [ "Form" ] } } }
错误点说明
- XSD中
Numbers元素明确设置了minOccurs="0",属于非必填,但转换后的JSON Schema里,Form对象的required数组包含了Numbers,将其错误标记为必填字段。 - XSD中
List下的Attr3元素设置了minOccurs="0",同样是非必填,但JSON Schema里List对象的required数组包含了Attr3,也被错误设为必填。
内容的提问来源于stack exchange,提问作者pokeyoyi
相关产品推荐
相关产品推荐

