【问题标题】:Nested Data XML design嵌套数据 XML 设计
【发布时间】:2011-02-07 01:56:13
【问题描述】:

希望在 XML 中嵌套(无限级别)元素。像这样:

<items>
    <item>
        <name>Item One</name>
        <item>
            <name>Item Two</name>
        </item>
        <item>
            <name>Item Three</name>
            <item>
                <name>Item Four</name>
            </item> <!-- etc... -->
        </item>
    </item>
</items>

但是。在浏览我在以下 cmets 中注意到的解决方案时: weird nesting in xml 虽然上面的格式很好,但它不会针对任何有罪的 DTD 进行验证。

两件事,嵌套相似元素的更好方法是什么,第二,DTD 的设计是什么。

更新:更愿意根据 XML Schema 而不是 DTD 进行验证。

【问题讨论】:

  • 我不知道 DTD,但你可以在 W3C XML Schema 中做到这一点。
  • :) 之前简要介绍了 Schemas,我肯定会使用它而不是 DTD。

标签: xml schema dtd


【解决方案1】:

DTD 允许您像这样定义递归结构。事实上,如果 XML 不能处理它,它就毫无用处了。

<!ELEMENT items (item*)>
<!ELEMENT item (name,item*)>
<!ELEMENT name (#PCDATA)>

XSD 也允许您这样做。就是多写一点:

<xsd:element name="items">
  <xsd:complexType>
    <xsd:sequence>
      <xsd:element name="item" type="itemType" minOccurs="0" maxOccurs="unbounded"/>
    </xsd:sequence>
  </xsd:complexType>
</xsd:element>
<xsd:complexType name="itemType">
  <xsd:sequence>
    <xsd:element name="name" type="xsd:string"/>
    <xsd:element name="item" type="itemType" minOccurs="0" maxOccurs="unbounded"/>
  </xsd:sequence>
</xsd:complexType>

【讨论】:

  • 谢谢。我可以确认这是一种非常令人满意且有效的存储方式,例如,以分层形式存储类别列表。
猜你喜欢
  • 2019-06-20
  • 1970-01-01
  • 2021-09-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多