XSD嵌套序列标签。这是有效的XSD吗?

时间:2014-05-22 04:44:49

标签: xml xsd

此XSD片段有效吗?

  <xs:complexType name="ShippingPointStructure">
    <xs:sequence>
      <xs:element minOccurs="0" maxOccurs="unbounded" ref="DeliveryID" />
      <xs:element minOccurs="0" ref="DeliveryDate" />
      <xs:sequence minOccurs="0" maxOccurs="unbounded">
        <xs:element minOccurs="0" ref="WarehouseID" />
        <xs:element minOccurs="0" ref="LocationID" />
      </xs:sequence>
      <xs:element minOccurs="0" ref="Address" />
    </xs:sequence>
  </xs:complexType>

我从未见过序列节点是另一个序列节点的直接子节点。我用谷歌搜索了一段时间但找不到答案。 XSD文件已通过一些在线验证器成功运行 - 但我怀疑它们只是检查XML有效性。

有人可以建议XML可能需要的样子吗?也许是这样的事情:

<ShippingPointStructure>
    <DeliveryID></DeliveryID>
    <DeliveryDate></DeliveryDate>

    <WarehouseID></WarehouseID>
    <LocationID></LocationID>
    <WarehouseID></WarehouseID>
    <LocationID></LocationID>
    <WarehouseID></WarehouseID>
    <LocationID></LocationID>

    <Address></Address>
</ShippingPointStructure>

任何帮助表示感谢。

背景:

这是欧洲政府部门提供的官方XSD文件的片段。我无法联系创作者,因为它来自几层客户。

1 个答案:

答案 0 :(得分:2)

是的,架构是有效的,您对其含义的解释是正确的。

它类似于DTD内容模型

(ID?, Date?, (Warehouse?, Location?)? Address?)

嵌套序列上的minOccurs = 0是多余的,并且使内容模型变得模糊不清,因为如果一个组可以为空,那么你就无法计算它发生的频率。但是XSD允许这种弱模糊。