Как использовать условие «выбора» в XSD для полезной нагрузки, содержащей неисчислимые элементы в массиве объектов? - PullRequest
0 голосов
/ 24 марта 2020

Ниже приведена фиктивная JSON полезная нагрузка:

{
        "transactionId":401,
        "data":[
        {
            "order":1,
            "operation":"INSERT",
            "table":"TC_TND_PRIMARY",
            "body":{
                "tcTndPrimaryId":5006899,
                "tndBoroId":4,
                "code":"008288",
                "tndPrimaryType":"S",
                "groupCode":null
            }
        },
        {
            "order":2,
            "operation":"INSERT",
            "table":"TC_TND",
            "body":{
                "tcTndId":497841,
                "tndBoroId":4,
                "code":"008288",
                "streetName":"NEW GOOD STREET",
                "aliasVariation":0,
                "prefix":"E",
                "ending":"BAR",
                "suffix":"SP",
                "region":null,
                "concatenatedFieldName":"E NEW GOOD STREET BAR SP"
            }
        }]
    }

Как понятно, это массив объектов "data" и внутри "data" элемент "body" неисчислим. Его эквивалент xml показан ниже:

<?xml version="1.0" encoding="UTF-8" ?>
<root>
    <transactionId>401</transactionId>
    <data>
        <order>1</order>
        <operation>INSERT</operation>
        <table>TC_TND_PRIMARY</table>
        <body>
            <tcTndPrimaryId>5006899</tcTndPrimaryId>
            <tndBoroId>4</tndBoroId>
            <code>008288</code>
            <tndPrimaryType>S</tndPrimaryType>
            <groupCode />
        </body>
    </data>
    <data>
        <order>2</order>
        <operation>INSERT</operation>
        <table>TC_TND</table>
        <body>
            <tcTndId>497841</tcTndId>
            <tndBoroId>4</tndBoroId>
            <code>008288</code>
            <streetName>NEW GOOD STREET</streetName>
            <aliasVariation>0</aliasVariation>
            <prefix>E</prefix>
            <ending>BAR</ending>
            <suffix>SP</suffix>
            <region />
            <concatenatedFieldName>E NEW GOOD STREET BAR SP</concatenatedFieldName>
        </body>
    </data>
</root>

А сгенерированная схема (XSD) показана ниже:

<?xml version="1.0" encoding="windows-1252" ?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://www.example.org"
            targetNamespace="http://www.example.org" elementFormDefault="qualified">
  <xsd:element name="root">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element name="transactionId" type="xsd:integer"/>
        <xsd:element name="data" maxOccurs="unbounded">
          <xsd:complexType>
            <xsd:sequence>
              <xsd:element name="order" type="xsd:integer"/>
              <xsd:element name="operation" type="xsd:string"/>
              <xsd:element name="table" type="xsd:string"/>
              <xsd:element name="body">
                <xsd:complexType>
                  <xsd:sequence>
                    <xsd:element name="tcTndPrimaryId" minOccurs="0" type="xsd:integer"/>
                    <xsd:element name="tndBoroId" type="xsd:integer"/>
                    <xsd:element name="code" type="xsd:integer"/>
                    <xsd:element name="tndPrimaryType" minOccurs="0" type="xsd:string"/>
                    <xsd:element name="groupCode" minOccurs="0"/>
                    <xsd:element name="tcTndId" type="xsd:integer"/>
                    <xsd:element name="streetName" type="xsd:string"/>
                    <xsd:element name="aliasVariation" type="xsd:integer"/>
                    <xsd:element name="prefix" type="xsd:string"/>
                    <xsd:element name="ending" type="xsd:string"/>
                    <xsd:element name="suffix" type="xsd:string"/>
                    <xsd:element name="region"/>
                    <xsd:element name="concatenatedFieldName" type="xsd:string"/>
                  </xsd:sequence>
                </xsd:complexType>
              </xsd:element>
            </xsd:sequence>
          </xsd:complexType>
        </xsd:element>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
</xsd:schema>

Поскольку схема объединяет все элементы. Но это не мое требование. Поскольку представленный API имеет другой входящий запрос, и сгенерированная схема оказывается другой. С json выше, я хочу другой набор данных в соответствии с данной «таблицей», и поэтому я буду работать с ними соответственно. Я подумал использовать здесь «выбор», чтобы отделить схему соответственно. Пожалуйста, предложите, как использовать выбор здесь. Или, если бы я мог использовать что-то еще, пожалуйста, предложите это тоже. enter code here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...