2010-04-12 15 views
1

Vous cherchez à imbriquer (à des niveaux illimités) des éléments en XML. Comme tel:Conception de données imbriquées 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> 

Cependant. Tout en recherchant une solution j'ai remarqué dans les commentaires de: weird nesting in xml alors que ce qui précède est bien formé, il ne serait pas valide contre toute DTD sinsible. Deux choses, quelle est la meilleure façon d'imbriquer des éléments similaires, et deuxièmement ce que serait la conception de la DTD.

MISE À JOUR: Préférerait valider par rapport à un schéma XML plutôt qu'à la DTD. La DTD vous permet de définir des structures récursives comme celle-ci:

+0

Je ne connais pas les DTD, mais vous pouvez le faire dans W3C XML Schema. – Cheeso

+0

:) lisait brièvement sur Schemas plus tôt et je vais certainement utiliser cela au lieu d'une DTD. –

Répondre

2

En fait, XML serait plutôt inutile s'il ne pouvait pas gérer cela.

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

XSD vous permet de le faire aussi. C'est juste un peu plus d'écriture:

<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> 
+0

merci. Puis-je confirmer qu'il s'agit d'une manière parfaitement satisfaisante et efficace de stocker, par exemple, une liste de catégories sous forme hiérarchique. –