Каково максимальное количество элементов в документе XML, если XSD не указывает maxOccurs?
У меня есть схема 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" для Prospectives, и max не происходит, затем для ROW он определяет minOccurs=0 и maxOccurs=unbounded.
Для последнего он определяет minOccurs=0 и maxOccurs=1 для сотрудников, а для ROW он не определяет minOccurs или maxOccurs.
Когда я запускаю утилиту, Xsd2Code
и он генерирует мой код на C#, для Проспектов он создает свойство Перспективы с коллекцией ROWs (как список ()), но для Сотрудников создает свойство Employee со свойством ROW, а не коллекцией.
Мой вопрос: каково правило схемы для этого? Поскольку для ROW для сотрудника не определено значение maxOccurs, применяются ли min и max для родительского элемента или это должна быть коллекция?
Я пытаюсь определить, является ли утилита, которая создает мой код, неправильной или неправильный файл.xsd.
1 ответ
По умолчанию, если maxOccurs
не указывается так же, как maxOccurs = "1"
,
Индикаторы вхождения используются для определения частоты появления элемента.
Примечание. Для всех индикаторов "Порядок" и "Группа" (любые, все, выбор, последовательность, имя группы и ссылка на группу) значение по умолчанию для maxOccurs и minOccurs равно 1.