Как преобразовать XSD maxOccurs=»неограниченный», minOccurs=»0″ в OpenAPI?

#xsd #openapi #servicestack-openapi

Вопрос:

                         <xs:element name="EarningsData" minOccurs="0">
                            <xs:complexType>
                                <xs:sequence>
                                    <xs:element type="xs:float" name="A"
                                        nillable="true" />
                                    <xs:element type="xs:float" name="B"
                                        nillable="true" />
                                </xs:sequence>
                            </xs:complexType>
                        </xs:element>
 

В приведенном выше XSD-файле есть minOccurs и nillable . Как это можно преобразовать в OpenAPI?

Ответ №1:

maxOccurs И minOccurs указывает, является ли это элементом массива или нет. Приведенное выше определение комплексного типа XSD преобразуется в следующее определение модели OAS 3:

     EarningsData:
      type: array
      minItems: 0
      items:
        type: object
        properties:
          A:
            type: integer
            format: float
            nullable: true
          B:
            type: integer
            format: float
            nullable: true
 

Если XSD имеет maxOccurs атрибут, его можно сопоставить со maxItems свойством в OpenAPI. Но если maxOccurs="unbounded" , это означает, что нет ограничений на количество элементов, поэтому вам не нужно maxItems явно указывать в OpenAPI.

Комментарии:

1. Если там maxOccurs неограничен, как maxOccurs=»неограничен», то как мы это напишем ?

2. Согласно спецификации , экземпляр массива допустим для «maxItems», если его размер меньше или равен значению этого ключевого слова. Поскольку при unbounded этом нет ограничений на количество элементов, вам не нужно явно указывать их в swagger.