Каково максимальное количество элементов в документе XML, если XSD не указывает maxOccurs? - PullRequest
1 голос
/ 19 декабря 2011

У меня есть схема XSD, которая определяет несколько элементов в документе. Два набора элементов, которые я ожидаю, будут коллекциями. Один набор элементов определен следующим образом:

<xsd:element name="Prospects" minOccurs="0">
<xsd:complexType>
  <xsd:sequence>
    <xsd:element name="ROW" minOccurs="0" maxOccurs="unbounded">
      <xsd:complexType>
        <xsd:sequence>
          <xsd:element name="ID" type="xdv:guidKey" nillable="false" />
          <xsd:element name="Name" minOccurs="0">
            <xsd:complexType>
              <xsd:simpleContent>
                <xsd:extension base="xdv:stringLen50">
                  <xsd:attribute name="origVal" type="xdv:stringLen50" use="optional" />
                </xsd:extension>
              </xsd:simpleContent>
            </xsd:complexType>
          </xsd:element>
          ... more stuff...
    </xsd:element>
  </xsd:sequence>
  <xsd:attribute name="name" type="xsd:string" use="required" fixed="Prospects" />
  <xsd:attribute name="alias" type="xsd:string" use="required" fixed="Prospects" />
  <xsd:attribute name="keys" type="xsd:string" use="required" fixed="ProposalID" />
  <xsd:attribute name="codeTableColVal" type="xdv:codeTableColVal" use="optional" />
</xsd:complexType>

Другой набор элементов выглядит так:

<xsd:element name="Employees" minOccurs="0" maxOccurs="1">
<xsd:complexType>
  <xsd:sequence>
    <xsd:element name="ROW">
      <xsd:complexType>
        <xsd:sequence>
          <xsd:element name="ID" type="xdv:guidKey" nillable="false" />
          <xsd:element name="Seq" type="xdv:guidKey" nillable="false" />
          <xsd:element name="CompanyName" minOccurs="0">
            <xsd:complexType>
              <xsd:simpleContent>
                <xsd:extension base="xdv:stringLen32">
                  <xsd:attribute name="origVal" type="xdv:stringLen32" use="optional" />
                </xsd:extension>
              </xsd:simpleContent>
            </xsd:complexType>
          </xsd:element>
          ... more stuff...
    </xsd:element>
  </xsd:sequence>
  <xsd:attribute name="name" type="xsd:string" use="required" fixed="Employees" />
  <xsd:attribute name="alias" type="xsd:string" use="required" fixed="Employees" />
  <xsd:attribute name="keys" type="xsd:string" use="required" fixed="OpportunityID,Seq" />
  <xsd:attribute name="codeTableColVal" type="xdv:codeTableColVal" use="optional" />
</xsd:complexType>

Основным отличием является то, что первое задает minOccurs = "0" для перспективы, и max не происходит, затем для ROW оно определяет minOccurs = 0 и maxOccurs = неограниченно.

Для последнего он определяет minOccurs = 0 и maxOccurs = 1 для сотрудников, а для ROW он не определяет minOccurs или maxOccurs.

Когда я запускаю служебную программу, Xsd2Code, и она генерирует мой код C #, для проспектов она создает свойство Prospects с коллекцией ROWs (как список ()), но для сотрудников создает свойство Employee. со свойством ROW, а не коллекцией.

Мой вопрос: каково правило схемы для этого? Так как нет maxOccurs, определенный в ROW для сотрудника, выполняет min и max для Родитель подает заявку или это должна быть коллекция?

Я пытаюсь определить, неправильна ли утилита, которая создает мой код, или файл .xsd.

1 Ответ

4 голосов
/ 19 декабря 2011

Значение по умолчанию, если maxOccurs не указан, совпадает с maxOccurs = "1".

С Индикаторы схемы XML .

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

Примечание. Для всех индикаторов "Порядок" и "Группа" (любой, все, выбор, последовательность, имя группы и ссылка на группу) значение по умолчанию для maxOccurs и minOccurs - 1.

...