XML-дизайн вложенных данных - PullRequest
1 голос
/ 12 апреля 2010

Вложение (до неограниченного уровня) элементов в 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>

Тем не менее. Просматривая решение, я заметил в комментариях: странное вложение в xml в то время как вышеупомянутое хорошо сформировано, это не будет проверять против любого грешного DTD.

Две вещи, что является лучшим способом вложения похожих элементов, и, во-вторых, каков будет дизайн DTD.

ОБНОВЛЕНИЕ: предпочли бы проверку по схеме XML, а не DTD.

1 Ответ

2 голосов
/ 12 апреля 2010

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>
...