9
votes

Utilisez un élément XML parent comme conteneur pour les éléments enfants récurrents?

Disons que vous souhaitez autoriser un élément XML particulier à se produire 0+ fois. Par exemple, l'élément code> peut se produire plusieurs fois:

<repository>
  <recordSet>
    <record>Record 1</record>
    <record>Record 2</record>
    <record>Record 3</record>
  </recordSet>
</repository>


0 commentaires

5 Réponses :


4
votes

Avoir un élément parent rend plus simple d'identifier les sections du XML et facilite la simplification des gestionnaires de cartographier les éléments enfants à une collection. Si vous avez un système qui interdit l'utilisation d'attributs (certains, c'est ennuyeux), vous devez également utiliser des éléments d'emballage pour distinguer les propriétés (telles que les identifiants) qui appartiennent à des enfants particuliers.

Autre que celui-ci est valable omettez l'élément parent et peut rendre le fichier nettement moins verbeux. p>

dans votre premier exemple, un élément utilisateur pourrait être mélangé avec les enregistrements, ceci est valide mais il peut être difficile de repérer: P >

<repositories>
  <users>
    <user>Bill</user>
  </users>
  <repository>
    <id>id1</id>
    <recordSet>
      <id>recordSet1</id>
      <record>Record 1</record>
      <record>Record 2</record>
      <record>Record 3</record>
    </recordSet>
    <recordSet>
      <id>recordSet2</id>
      <record>Record 1</record>
      <record>Record 2</record>
      <record>Record 3</record>
    </recordSet>
  </repository>
  <repository>
    <id>id2</id>
    <recordSet>
      <record>Record 1</record>
      <record>Record 2</record>
      <record>Record 3</record>
    </recordSet>
  </repository>
</repositories>


0 commentaires

1
votes

qui est utile si dans votre Vous souhaitez autoriser plusieurs éléments: xxx


1 commentaires

Vous devez préciser les valeurs d'attribut dans votre exemple.



10
votes

Vous avez trébuché sur la seconde de mes règles de Guide de conception XML (le premier étant d'utiliser des attributs uniquement pour les identifiants et les réel métadonnées, le troisième étant n'utilise pas les espaces de noms à moins que vous sachiez ce que vous savez «Re font) que j'essaie d'utiliser lors de la conception de documents XML. En plus d'être une bonne règle - du pouce, il fait également votre document:

  • plus facile à modéliser dans le schéma XML ou dans d'autres langues de validation
    • également plus facile à réutiliser le type complexe
    • plus facile à lire (IMHO)
    • plus facile pour les utilisateurs à grok lors de la traversée de votre document
    • (susmentionné) plus facile à lier à un objet OOP de votre choix

      Une suggestion, j'essaierais: xxx

      Le suffixe "S" plus simple est plus succinct et plus facile à mémoriser et à appliquer. Si vous utilisez un nom de collection générique, vous ou un collègue oublierez celui-ci éventuellement, vous verrez donc des ensembles mélangés avec des listes mélangées à un conteneur. Mais c'est plus de style que de bonnes pratiques et je ne veux pas commencer une guerre religieuse;)

      (UpperCamel pour les éléments !, MAXCAMEL pour les attributs! - / P>


0 commentaires

2
votes

Bien que j'ai aussi une préférence instinctive pour des collections enveloppées, il est intéressant de noter que Google a une opinion différente.

éléments XML qui ne font que supporter des éléments d'enfants répétés ne doivent pas être utilisés. [Justification: Ils ne sont pas utilisés dans Atom et ne rien ajouter.]


0 commentaires

0
votes

Si vous devrez valider votre XML avec un XSD et souhaiter vous en tenir au style style de structuration de votre XSD avec tous les types explicites, et si vous souhaitez appliquer un caractère d'attribut local sur Ces éléments enfants répétitifs (par exemple, lors du mappage vers le dictionnaire lors de la désérialisation): vous n'aurez nulle part où mettre votre XS: touche Définitions. Celles-ci ne sont pas autorisées sous XS: ComplexType uniquement sous Éléments. Vous serez donc obligé d'avoir un conteneur supplémentaire comme . Ce n'est pas un conceptuel, mais une limitation des outils.


0 commentaires