1

我有一个定义文档中多个元素的 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>

主要区别在于前者为 Prospects 指定 minOccurs="0" 并且没有出现最大值,然后为 ROW 定义 minOccurs=0 和 maxOccurs=unbounded。

对于后者,它为员工定义 minOccurs=0 和 maxOccurs=1,而对于 ROW,它没有定义 minOccurs 或 maxOccurs。

当我运行实用程序时Xsd2Code,它会为 Prospects 生成我的 C# 代码,它会创建一个带有 ROWs 集合(作为 List())的 Prospects 属性,但对于Employees,它会创建一个带有 ROW 属性的 Employee 属性,而不是一个集合。

我的问题:这个的模式规则是什么?由于没有在 ROW 上为员工定义 maxOccurs 是应用父级的最小值和最大值还是应该是一个集合?

我正在尝试确定创建我的代码的实用程序是否错误或 .xsd 文件是否错误。

4

1 回答 1

4

未指定的默认值maxOccurs与 相同maxOccurs = "1"

来自XML 模式指标

出现指示符用于定义元素出现的频率。

注意:对于所有“Order”和“Group”指标(any、all、choice、sequence、group name 和 group reference),maxOccurs 和 minOccurs 的默认值为 1。

于 2011-12-19T19:55:14.730 回答