Как использовать элемент группы XML-схемы - PullRequest
2 голосов
/ 05 июля 2011

Я пытаюсь спроектировать структуру XML для сбора выходных данных из электронной таблицы, которая содержит имя клиента и множество различных столбцов суммы.И есть полный ряд, а также.

У меня есть около 4 определений столбцов сумм, которые я хочу использовать как группу.Итак, я объявил группу под названием AmountsGroup, а затем использовал имя группы в качестве атрибута 'ref' в моем определении сложного типа.Вот как это выглядит

<xsd:complexType name="AmountByCustomerType">
    <xsd:sequence>
        <xsd:element name="Customer" type="xsd:string" />
        <xsd:group ref="AmountsGroup" maxOccurs="unbounded"/>
    </xsd:sequence>
</xsd:complexType>

<xsd:complexType name="AmountByCustomerTotalType">
    <xsd:sequence>
        <xsd:element name="Total" type="xsd:string" />
        <xsd:group ref="AmountsGroup" />
    </xsd:sequence>
</xsd:complexType>

<xsd:group name="AmountsGroup">
    <xsd:sequence>
        <xsd:element name="AmountByPeriod" type="AmountByPeriodType" maxOccurs="unbounded" />
        <xsd:element name="NetAdjustments" type="xsd:decimal" />
        <xsd:element name="OriginalSalesAmount" type="xsd:decimal" minOccurs="0"/>
        <xsd:element name="RevisedAmount" type="xsd:decimal" />
    </xsd:sequence>        
</xsd:group>

Вот мои вопросы:

  1. Я объявил группу как имеющую maxOccurs = "unbounded" в первом complexType, где ввторой complexType, который я пропустил, означая, что это должно произойти только один раз.Будет ли это работать правильно?Мне нужно много строк с информацией о клиенте и только одну строку с общей суммой.

  2. В экземпляре XML документа не нужно нигде указывать имя этой группы - это правильно?

  3. Есть ли лучший способ структурировать отдельные строки и общий тип структуры?

  4. Это хорошая практика, когда я использую шаблон жалюзи?Я не хочу объявлять complexType с тех пор, как должен объявить элемент, который появится в документе экземпляра XML, добавив, таким образом, еще один уровень в дерево объектов XML.Есть ли способ использовать именованный тип без предоставления ему элемента самостоятельно?Я надеюсь, вы понимаете, что я пытаюсь сделать.

Есть мысли?

1 Ответ

2 голосов
/ 06 июля 2011
  1. Правильно, maxOccurs относится к группе в целом.

  2. Правильно, имя группы содержится только в схеме.

  3. Я собирался предложить ввести элемент для инкапсуляции членов группы, но я вижу из вашего 4 th вопроса, который вы пытаетесь избежать. Я предпочитаю это, так как для синтаксического анализатора легче идентифицировать начало и конец каждой "строки" и отражает инкапсуляцию программирования.

  4. Кажется разумным; вы по-прежнему придерживаетесь духа многократно используемых компонентов Venetian Blinds, не выделяя пространства имен для локальных элементов.

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